Wyrażenia regularnego w Pythonie 3.0 nie pasujące

głosy
47

Jeśli łańcuch jest I am Fineona daje mi jako wyjście I.

import re
string='hello I am Fine'
print(re.search(r'[A-Z]?',string).group())
Utwórz 28/12/2016 o 03:09
użytkownik
W innych językach...                            


2 odpowiedzi

głosy
0

W ?Określa, że poprzedzający znak lub klasa mogą lub nie mogą istnieć. Kiedy re.searchrozpoczyna wyszukiwanie ciąg, nie znajdzie tej klasy na początku łańcucha ... i to jest dopuszczalne ze względu na mecz ?. To jest po prostu wraca pusty łańcuch.

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

Jeśli chcesz go znaleźć pierwsze litery, nie należy używać ?:

>>> re.search(r'[A-Z]', 'hello I am Fine').group()
'I'
Odpowiedział 28/12/2016 o 03:21
źródło użytkownik

głosy
1

Można użyć FindAll metody.

Od docs Pythona , sekcja 7.2.5.6,

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

W Twoim przypadku,

 >>> re.findall(r'[A-Z]',"hello I am Fine")
     ['I', 'F']
Odpowiedział 28/12/2016 o 04:31
źródło użytkownik

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