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



为什么下面的代码块与参数不匹配?

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

演示我的评论:

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

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

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

也有效...

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

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

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

最新更新