正则表达式:(。*),(。*?)和。*

时间:2015-01-10 21:25:48

标签: python regex

有人可以向我解释这3个区块之间的区别:

1 -> (.*)
2 -> (.*?)
3 -> .*

据我了解,?使最后一个字符成为可选字符,为什么要把它?以及为什么不把括号放在最后呢?

这来自:http://www.tutorialspoint.com/python/python_reg_expressions.htm

1st example : searchObj = re.search( r'(.*) are (.*?) .*', line, re.M|re.I)

1 个答案:

答案 0 :(得分:5)

.*将匹配任何字符(如果使用dotall,则包括换行符)。这很贪婪:它尽可能地匹配。

(.*)会将其添加到捕获组。

(.*?) ?使.*非贪婪,尽可能少地匹配进行匹配,括号也使其成为捕获组。

例如:

>>> import re
>>> txt = ''' foo
... bar
... baz '''
>>> for found in re.finditer('(.*)', txt):
...     print found.groups()
... 
(' foo',)
('',)
('bar',)
('',)
('baz ',)
('',)
>>> for found in re.finditer('.*', txt):
...     print found.groups()
... 
()
()
()
()
()
()
>>> for found in re.finditer('.*', txt, re.DOTALL):
...     print found.groups()
... 
()
()
>>> for found in re.finditer('(.*)', txt, re.DOTALL):
...     print found.groups()
... 
(' foo\nbar\nbaz ',)
('',)

由于?匹配尽可能少,我们匹配空字符串:

>>> for found in re.finditer('(.*?)', txt, re.DOTALL):
...     print found.groups()
... 
('',)
('',)
('',)
('',)
('',)
('',)
('',)
('',)
('',)
('',)
('',)
('',)
('',)
('',)