匹配python中的空格包围的括号与正则表达式

时间:2014-02-23 18:44:09

标签: python regex

为什么以下代码块与parantheses不匹配?

In [27]: import re

In [28]: re.match('.*?([\(]*)', '  (((( ' ).groups()
Out[28]: ('',)

2 个答案:

答案 0 :(得分:2)

展示我的评论:

import re
>>> re.match('.*?([\(]*)', '   (((( ' ).groups()
('',)
>>> re.match('.*?([\(]+)', '   (((( ' ).groups()
('((((',)
>>> 

注意 - 你甚至不需要[]内的反斜杠 - 因为特殊字符会失去意义。所以

>>> re.match('.*?([(]+)', '   (((( ' ).groups()
('((((',)
>>> 

也有效......

这是因为你的“非贪婪”第一个量词(*?)不需要给第二个量词提供任何东西 - 因为第二个量词对零匹配感到满意。

答案 1 :(得分:1)

在您的情况下.*?表示一切,因为您使用了[\(]*,这意味着0或更多。因此,将*更改为+对您有用,因为+表示1或更多。

re.match('.*?([\(]+)', '  (((( ' ).groups()