2012-03-22 3 views
0

Я хочу сопоставить некоторые цифры, которым предшествует нецифровая или в начале строки.Python regex: Как я могу совместить начало строки в выборе?

Поскольку карет не имеет особого значения внутри скобок, я не могу использовать его, поэтому я проверил the reference и обнаружил альтернативную форму \A.

Однако, когда я пытаюсь использовать его я получаю сообщение об ошибке:

>>> s = '123' 
>>> re.findall('[\D\A]\d+', s) 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
    File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/re.py", line 177, in findall 
    return _compile(pattern, flags).findall(string) 
    File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/re.py", line 245, in _compile 
    raise error, v # invalid expression 
sre_constants.error: internal: unsupported set operator 

Что я делаю неправильно?

+0

Вы не можете просто использовать каретку за пределами скобок, например? '^ [A-Za-z] +?' Также не совсем верно о том, что каретки не имеют особого значения внутри скобок. Если каретка является первым символом внутри скобок, он отрицает набор символов внутри (говорит, что соответствует всем, кроме '[^ ...]' –

+2

", некоторые цифры, которым предшествует нецифровая или в начале строки" - doesn ? т, что значит, все цифры Просто используйте '\ D +' ... – Izkata

+0

@lzkata: реальный случай использования является более сложным, это просто упрощение –

ответ

2

Вы можете использовать отрицательный просмотра назад:

(?<!\d)\d+ 

Ваша проблема заключается в том, что вы используете \A (нулевой ширины утверждение) в классе символов, что для согласования одного символа. Вы могли бы написать это как (?:\D|\A) вместо этого, но lookbehind лучше.

+0

Спасибо Qtax. Для этого должно быть некоторое сообщение об ошибке. .. –

0

Повторы в регулярных выражениях жадны по умолчанию, так что использование re.findall() с регулярным выражением \d+ получит вас именно то, что вы хотите:

re.findall(r'\d+', s) 

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

+1

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

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