首先可以看这个mail:https://mail.python.org/pipermail/python-list/2014-July/674576.html
本来呢: ^
只匹配字符串的开头,$
只匹配字符串结尾,.
不匹配换行符.
re.S做的事情是: 让.
也匹配换行符
re.M做的事情是: 让^
匹配每行的开头,$
匹配每行的结尾
举个例子
import re
text = """First line.
Second line.
Third line."""
pattern = "^(.*?)$" # Match anything from the start to end. 非贪婪匹配
# 让^、$只匹配字符串的开头、结尾, .不匹配换行符
ret1 = re.search(pattern, text)
print(ret1)
# 让.匹配换行符
ret2 = re.search(pattern, text, re.S)
print(ret2)
# 让^、$匹配每行的开头、结尾, 同时让.匹配换行符, 且pattern是非贪婪匹配
ret3 = re.search(pattern, text, re.M | re.S)
print(ret3)
# 让^、$匹配每行的开头、结尾, 同时让.匹配换行符, 且pattern是贪婪匹配
ret4 = re.search("^(.*)$", text, re.M | re.S)
print(ret4)
# 让^、$匹配每行的开头、结尾, 非贪婪
ret5 = re.findall(pattern, text, re.M)
print(ret5)
输出结果为
None
<_sre.SRE_Match object; span=(0, 36), match='First line.\nSecond line.\nThird line.'>
<_sre.SRE_Match object; span=(0, 11), match='First line.'>
<_sre.SRE_Match object; span=(0, 36), match='First line.\nSecond line.\nThird line.'>
['First line.', 'Second line.', 'Third line.']
网友评论