2015-03-18 2 views
0
In [30]: s = '123 45$78 [email protected] %' 

In [31]: print re.findall(r'\b[\w]+ ?', s) 
['123 ', '45', '78 ', '98', 'abc '] 

In [32]: print re.findall(r'(\b[\w]+ ?)', s) 
['123 ', '45', '78 ', '98', 'abc '] 

In [33]: print re.findall(r'(\b[\w]+ ?)+', s) 
['45', '98', 'abc '] 

Ожидаемые результаты заключаются в следующем:Как обеспечить соблюдение жадные соответствия в регулярном выражении Python

['123 45', '78 98', 'abc '] 

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

Спасибо

ответ

1

Python делает жадные соответствия. Проблема в том, что ваше регулярное выражение кажется неправильным.

С [\w]+ ?, вы сопоставляете некоторые символы, по выбору , а затем пробел. То, что вам кажется нужным, - это просто некоторые символы или пробелы, смешанные вместе. Попробуйте следующее:

In [10]: re.findall(r'\b[\w ]+', s) 
Out[10]: ['123 45', '78 98', 'abc '] 
Смежные вопросы