Regulárních výrazů v Pythonu 3.0 se neshodují

hlasů
47

V případě, že řetězec je I am Fineto mi dává výstup jako I.

import re
string='hello I am Fine'
print(re.search(r'[A-Z]?',string).group())
Položena 28/12/2016 v 03:09
uživatelem
V jiných jazycích...                            


2 odpovědí

hlasů
0

K ?určuje, že předchozí znak nebo třídy může nebo nemusí existovat. Když re.searchzačne hledat řetězec, nenajde tuto třídu na začátku řetězce ... a to je přijatelná shoda to z ?. Je to prostě vrací prázdný řetězec.

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

Pokud chcete najít první velké písmeno, nemusíte používat ?:

>>> re.search(r'[A-Z]', 'hello I am Fine').group()
'I'
Odpovězeno 28/12/2016 v 03:21
zdroj uživatelem

hlasů
1

Můžete použít findall metodu.

Od Python dokumenty , sekce 7.2.5.6,

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

Ve vašem případě,

 >>> re.findall(r'[A-Z]',"hello I am Fine")
     ['I', 'F']
Odpovězeno 28/12/2016 v 04:31
zdroj uživatelem

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