Quero excluir o texto após "(trading as"). Minha expressão regular até agora está como abaixo. Tentei um look forward negativo (?!\s\(trading as))
. Mas não está funcionando como esperado. Qualquer ajuda é bem-vinda.
import re
def extract_company_name(title):
match = re.findall(r'\b[A-Z0-9-](?:[A-Z0-9 \t&.-](?:\s*\(\d+\))?)*(?:\b|(?<=\)))', title)
return ','.join(match) if match else None
text = """TEST LIMITED (trading as FOO Limited) (in relation), TEST (2005) LTD, WINDING LIMITED (in liquidation)"""
print(extract_company_name(text))
Texto: TEST LIMITED (operando como FOO Limited) (em relação), TEST (2005) LTD, WINDING LIMITED (em liquidação)
Produção esperada: TEST LIMITED, TEST (2005) LTD, WINDING LIMITED
" Para excluir o texto depois
(trading as
", você pode usar o truque usual de regex para corresponder ao que você não precisa e capturar o que você precisa.No entanto, você também precisa adaptar seu código para que esse truque funcione da maneira que você deseja.
Então, o código ficará assim
Veja a demonstração online
Mudanças:
\(trading as.*|
a alternativa é adicionada antes do seu padrão para corresponder(trading as
e o resto da string até o final (adicionere.S
oure.DOTALL
ao seure.findall
se a string contiver quebras de linha) (também, adicione\b
depoisas
se deve ser uma palavra inteira)(...)
, então elere.findall
só poderia retornar essas correspondências(trading as
for correspondida, você precisa filtrar as correspondências antes de uni-las, então você precisa de','.join(x for x in match if x)
.Para encontrar correspondências fora de
(trading as
e a próxima)
, basta ajustar a primeira alternativa e usarVeja a demonstração do regex .
Acredito que, estritamente falando, o
(trading as
comprimento é fixo.Se for esse o caso, acrescentar uma afirmação negativa simples em combinação com o limite de palavras existente deve funcionar.
https://regex101.com/r/vW8nUr/1
E falando estritamente as duas últimas partidas válidas ocorrem a seguir
(trading as
também.Esta pergunta é um pouco vaga, mas tentarei ajudar. Se você estiver tentando excluir tudo após "including as" ou, neste caso, gerar a saída "TEST LIMITED (trading as", este código deve funcionar:
Edit: Entendo o problema que você está enfrentando agora. Sua expressão regular praticamente removeu todas as letras maiúsculas e as adicionou à string de saída. Se todas as empresas tiverem um separador, como um colchete, após o nome da empresa, você poderia fazer algo assim. Editei o código acima.