Expressão regular em Python 3.0 não corresponde

votos
47

Se a string é I am Fineele está me dando saída como I.

import re
string='hello I am Fine'
print(re.search(r'[A-Z]?',string).group())
Publicado 28/12/2016 em 03:09
usuário
Em outras línguas...                            


2 respostas

votos
0

Os ?especifica que o carácter anterior ou classe pode ou não existir. Quando re.searchcomeça a procurar a corda, ele não encontrar essa classe no início da cadeia ... e que é uma correspondência aceitável por causa da ?. É simplesmente devolver a cadeia vazia.

>>> re.search(r'[A-Z]?', 'hello I am Fine').group()
''

Se você quer que ele encontrar a primeira letra maiúscula, não use um ?:

>>> re.search(r'[A-Z]', 'hello I am Fine').group()
'I'
Respondeu 28/12/2016 em 03:21
fonte usuário

votos
1

Você pode usar o findall método.

De docs Python , seção 7.2.5.6,

findall() matches all occurrences of a pattern, not just the first one as search() does.

No seu caso,

 >>> re.findall(r'[A-Z]',"hello I am Fine")
     ['I', 'F']
Respondeu 28/12/2016 em 04:31
fonte usuário

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