python的多行匹配(单行模式【re.S】和多行模式【re.M】的区别与详细说明)

python的多行匹配(单行模式【re.S】和多行模式【re.M】的区别与详细说明)

此文章可帮助你快速理清正则中单行模式【re.S】和多行模式【re.M】的作用和区别,和他们与默认的有啥区别,实际你看一下我写的代码和注释就能完全懂了

print("\n" + "----------------多行匹配(单行模式【re.S】和多行模式【re.M】)------------------")
# 10. 多行匹配 re.S和re.M
string1 = """a 123.
dog runs to cat.
You run to dog.
"""
res1 = re.search('dog.*', string1)
print(res1) # 输出dog runs to cat.这一行,剩下不会输出,默认只读取一行写上第二行内容会匹配不上导致报错
res2 = re.search("(dog.*)", string1, re.M)
print(res2) # 输出dog runs to cat.这一行,剩下不会输出,多行模式下与默认一样
res3 = re.search('^dog.*', string1)
print(res3) # 输出none,默认开头为整段字符串的开头,不可以是其他的
res3 = re.search('^a.*', string1)
print(res3) # 输出a 123.,默认开头为整段字符串的开头,不可以是其他的
res4 = re.search('^dog.*', string1, re.M)
print(res4) # 输出dog runs to cat.多行模式开头可以不是字符串的开头,可以为此段字符串其他行的开头
res5 = re.search('dog.*dog', string1)
print(res5) # 输出none,.*默认一行一行去匹配,不可以多行一起匹配,且匹配完会丢失上一行匹配的数据,所以会找不到
res6 = re.search('dog.*dog', string1, re.S)
print(res6) # 输出你想要的结果,看成一个整体去匹配,可以多行匹配
print(res6.group()) # 多行输出,不会xxxx\nXXXX这样单行输出
# 总结就是单行模式改变了点号(.)的匹配行为,具体就是单行模式下,看成一个整体,.*会输出所有行的内容,而原来默认一行一行去
# 匹配,不可以多行一起匹配,且匹配完会丢失上一行匹配的数据,所以会找不到多行模式改变了^和$的匹配行为,具体就是多行模式下
# ^和$可以为此字符串其他行的开头或者结尾,而原来默认开头为整段字符串的开头,不可以是其他的,结尾同理

 # 总结就是单行模式改变了点号(.)的匹配行为,具体就是单行模式下,看成一个整体,.*会输出所有行的内容,而原来默认一行一行去匹配,不可以多行一起匹配,且匹配完会丢失上一行匹配的数据,所以会找不到

多行模式改变了^和$的匹配行为,具体就是多行模式下^和$可以为此字符串其他行的开头或者结尾,而原来默认开头为整段字符串的开头,不可以是其他的,结尾同理

ps:上面笔记是直接复制我代码上去的,刚好适应我的电脑注释啥的,复制下来可以自己整理一下注释

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值