match regex python com a corda que tem vários espaços

votos
0

Eu tenho o seguinte exemplo string:

'NAME: test1,  DESCR: AAA 1111S ABC 48 BB (4 BBBB) TEST1 '

Eu estou tentando extrair AAA 1111S, mas estou lutando para saber o que estou fazendo de errado na regex?

o regex que estou usando é abaixo, eu pensei que iria trabalhar com base no primeiro espaço, então segundo espaço mais caracteres restantes na string.

^.+(AAA\s.+)\s.+$

mas só vai sair o seguinte:

AAA 1111S ABC 48 BB (4 BBBB) TEST1

Publicado 20/10/2018 em 13:57
fonte usuário
Em outras línguas...                            


2 respostas

votos
0
>>> import re
>>> string = 'NAME: "test1",  DESCR: "AAA 1111S ABC 48 BB (4 BBBB) TEST1
>>> sol = re.findall('\w{3}\s\w{5}',string) 
>>> sol
['AAA 1111S']
Respondeu 20/10/2018 em 14:11
fonte usuário

votos
0

Em sua regex você usa (AAA\s.+), onde o .+irá corresponder a qualquer caractere 1+ vezes. Que irá corresponder até o fim da cadeia. A parte que se segue \s.+"$irá corresponderTEST1 "

Você poderia usar um lookbehind positiva (?<=")para afirmar o que está à esquerda é uma citação de casal. Em seguida, junte AAA seguido por 1+ vezes por caracteres de espaço em branco \s+e 1+ vezes não um espaço em branco \S+.

(?<=")AAA\s+\S+

regex demonstração

Se você quiser manter a âncora ^ e jogo da primeira ocorrência de AAA, você poderia usar .+?o que irá corresponder a todos os caracteres 1+ vezes não gananciosos.

^.+?(AAA\s+\S+)

regex demonstração

Respondeu 20/10/2018 em 14:02
fonte usuário

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more