2012-04-10 2 views
4

Я использую python, чтобы попытаться написать простой код, который просматривает строки с регулярными выражениями и находит вещи. В этой строке:Проблема с очень простым регулярным выражением

and the next nothing is 44827 

Я хочу, чтобы мое регулярное выражение возвращало только цифры.

Я настроил свою программу питона, как это:

buf = "and the next nothing is 44827" 
number = re.search("[0-9]*", buf) 
print buf 
print number.group() 

Что number.group() возвращает пустую строку. Однако при регулярном выражении:

number = re.search("[0-9]+", buf) 

Полное количество (44827) правильно извлечено. Что мне здесь не хватает?

ответ

4

Ваше первое регулярное выражение соответствует пустой строке перед буквой «a», поэтому она останавливается там. Ваша вторая не делает, поэтому она продолжает пытаться.

8

Проблема заключается в том, что [0-9]* соответствует нулю или более цифрам, поэтому он более чем согласен с строкой нулевой длины.

Между тем, [0-9]+ соответствует одной или нескольким цифрам, поэтому ему нужно увидеть хотя бы одно число, чтобы поймать.


вы можете использовать findall и обрабатывать случай, когда у вас есть несколько номеров в каждой строке.

4

Это потому, что первая попытка соответствует пустой строке - вы запрашиваете ее для «0 или более цифр» - поэтому первое совпадение пуст в начале строки. Когда вы запрашиваете «одну или несколько цифр», первое совпадение начинается с первого «4» и продолжается оттуда до конца номера.

3

Посмотрите сами.

Подсказка:

  • * матчи 0 или более раз-
  • + матчи 1-или-больше, т imes

Очевидно, что первый случай имеет более высокий приоритет над вторым. И у двигателя регулярных выражений нет проблемы вообще, чтобы не соответствовать чему-либо. :-)

Смежные вопросы