re.S与re.M

首先可以看这个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.']
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容