Регулярное выражение в Python 3.0 не соответствует

голоса
47

Если строка I am Fineэто дает мне результат , как I.

import re
string='hello I am Fine'
print(re.search(r'[A-Z]?',string).group())
Задан 28/12/2016 в 03:09
пользователем
На других языках...                            


2 ответов

голоса
0

В ?указывает , что может или не может существовать предыдущий символ или класс. Когда re.searchначинает поиск строки, он не находит этот класс в начале строки ... и что является приемлемым матч из-за ?. Это просто возвращая пустую строку.

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

Если вы хотите , чтобы найти первую заглавную букву, не использовать ?:

>>> re.search(r'[A-Z]', 'hello I am Fine').group()
'I'
Ответил 28/12/2016 в 03:21
источник пользователем

голоса
1

Вы можете использовать FindAll метод.

Из документации Python , раздел 7.2.5.6,

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

В твоем случае,

 >>> re.findall(r'[A-Z]',"hello I am Fine")
     ['I', 'F']
Ответил 28/12/2016 в 04:31
источник пользователем

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