有人可以向我解释这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)
答案 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()
...
('',)
('',)
('',)
('',)
('',)
('',)
('',)
('',)
('',)
('',)
('',)
('',)
('',)
('',)