re.S与re.M

2018-11-25  本文已影响86人  ThomasYoungK

首先可以看这个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.']
上一篇下一篇

猜你喜欢

热点阅读