Почему мой код регулярного выражения не возвращает никакого результата?

Почему мой код регулярного выражения не возвращает никакого результата?

Вот мой код:

import re
word="ABCD 12345"
match=re.search(r"\d*",word)
print(match.group())

Для этого кода я не получаю никакого вывода (и никаких ошибок).

Помогите, пожалуйста. В чем тут проблема?

решение1

Специальный *символ означает «соответствиеноль или больше". Другими словами, \d*допускается совпадение нулевой длины, а поскольку это единственное, что есть в вашем регулярном выражении, то и все совпадение допускается иметь нулевую длину.

Это правда, что *это жадный метод, и он вернет все цифры.еслион фактически дошел до позиции, где присутствует «12345» — например, re.match(r"\d*", "12345")вернул бы целое число:

>>> re.search(r"\d*", "12345")
<re.Match object; span=(0, 5), match='12345'>

Но в вашем случае он на самом деле не добирается до этого места в строке, вместо этого он сразу решает, что есть совпадение в позиции 0, длиной 0. Обратите внимание на атрибут 'span':

>>> re.search(r"\d*", "ABCD 12345")
<re.Сопоставить объект;диапазон=(0, 0), совпадение=''>

Вероятно, вы захотите использовать \d+вместо этого .

Связанный контент