2011-02-03 4 views
3

В чем разница между '{m}' и '{m, n}?' в http://docs.python.org/library/re.html говорится: «{m, n}?» соответствует номерам в диапазоне от m до n раз, но это не жадный поиск. Поэтому, если его не жадный поиск не будет соответствовать только м, независимо от того, что?регулярное выражение python

+0

Я не уверен в регулярных выражениях, пишущих в стиле Python, но большинство ароматов регулярных выражений (и большинство языков программирования в этом отношении) имеют несколько функционально идентичных конструкций. Это не одно, но вы не должны удивляться, если найдете их. –

+0

@chris: при сомнении легко сравнить систему регулярных выражений с нескольких языков с помощью онлайн-инструментов: PHP и javascript получили http://regex.larsolavtorvik.com/, в то время как python получил http://ksamuel.pythonanywhere.com. здесь вы можете легко увидеть, что это не новая конструкция. –

ответ

14

{m,n}? будет предпочтительно соответствовать только m повторениям, но он будет расширяться по мере необходимости до n повторений, если это необходимо для более длительного совпадения.

^x{2}y$ Сравнить и ^x{2,4}?y$:

Бывший потерпит неудачу на xxxy в то время как последний будет соответствовать.

Резюмируя:

x{m}: матч xточноm раз.

x{m,n}: Попробуйте матч xn раз, но если это вызывает общий матч потерпеть неудачу, вернуть по мере необходимости, но матч по крайней мере m раз (жадный квантор).

x{m,n}?: Попробуйте матч xm раз, но если это вызывает общий матч на провал, расширяться по мере необходимости, но матч в большинстве n раз (ленивый кванторных).

+0

хороший ответ, спасибо – Doboy

+0

Yep - отметьте его! – Marco

+2

@Marco: Нет, вы никогда не должны отмечать решение как ответ всего за 15 минут. Всегда ждите часа или около того. (На мой взгляд, это довольно крутое, не очень четкое объяснение.) –

1

Это проще всего увидеть на примере с помощью двух соответствующих групп:

>>> re.match(r'(x{1,3}?)(.*)', 'xxxxx').groups() 
('x', 'xxxx') 
>>> re.match(r'(x{1,3})(.*)', 'xxxxx').groups() 
('xxx', 'xx') 

Другими словами, {п, т} и {п, т}? оба могут соответствовать точно таким же вещам; то, что он изменил, - это то, где группируются, когда есть несколько способов совпадения.

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