正则表达式中(?s)与(?m)的区别解析

2024-03-01 0 352
目录
  • 正则表达式中(?s)与(?m)的区别
    • 理论:
    • 实践:
  • 正则表达式re.S与re.M的区别
    • 一、python中的re模块
    • 二、re.S与re.M的区别
    • 三、案例演示
    • 四、复习一下正则表达式

正则表达式中(?s)与(?m)的区别

理论:

(?m) 和 (?s) 是正则表达式中的两个模式标志,它们具有不同的作用:

1.(?m) 多行模式标志(也称为 “multiline” 模式):

  • 默认情况下,正则表达式将整个输入字符串视为单行
  • 多行文本中使用该标志时,正则表达式会匹配每一行

2.(?s) 单行模式标志(也称为 “dotall” 模式):

  • 默认情况下,. 元字符匹配除了换行符之外的任意字符。
  • 当使用 单行模式标志时,. 元字符将匹配包括换行符在内的任意字符。

实践:

import re
pattern1 = r\’^.*\’
pattern2 = r\'(?m)^.*\’
pattern3 = r\'(?s)^.*\’
matches1 = re.findall(pattern1, \”Hello\\nWorld\”)
matches2 = re.findall(pattern2, \”Hello\\nWorld\”)
matches3 = re.findall(pattern3, \”Hello\\nWorld\”)
print(matches1) # 输出:[\’Hello\’]
print(matches2) # 输出:[\’Hello\’, \’World\’]
print(matches3) # 输出:[\’Hello\\nWorld\’]

正则表达式re.S与re.M的区别

一、python中的re模块

import re # 导入re模块

二、re.S与re.M的区别

1. re.S表示单行匹配模式

2. re.M表示多行匹配模式

三、案例演示

1. re.M多行匹配

import re
string = \’\’\’
hate is a beautiful feel
love you very much
love she
love her
\’\’\’
pattern = re.compile(r\’^love\’,re.M) # re.M 多行模式
ret = pattern.findall(string)
print(ret) # [\’love\’, \’love\’, \’love\’]

2. re.S单行匹配

import re
string = \’\’\'<div>沁园春-雪
北国风光
千里冰封
万里雪飘
望长城内外
惟余莽莽
大河上下
顿失滔滔
山舞银蛇
原驰蜡象
欲与天公试比高
</div>\’\’\’
pattern = re.compile(r\’^<div>(.*?)</div>\’,re.S) # re.S 单行模式
ret = pattern.findall(string)
print(ret) # [\’沁园春-雪\\n北国风光\\n千里冰封\\n万里雪飘\\n望长城内外\\n惟余莽莽\\n大河上下\\n顿失滔滔\\n山舞银蛇\\n原驰蜡象\\n欲与天公试比高\\n\’]

【.】可以匹配除换行符之外的所有字符,当设置成re.S之后,可以简单理解为:【.】可以匹配换行符,所以【.】可以匹配所有字符

3. \\w+不能匹配换行符

import re
string = \’\’\'<div>沁园春-雪
北国风光
千里冰封
万里雪飘
望长城内外
惟余莽莽
大河上下
顿失滔滔
山舞银蛇
原驰蜡象
欲与天公试比高
</div>\’\’\’
pattern = re.compile(r\’^<div>(\\w+)</div>\’,re.S) # re.S 单行模式
ret = pattern.findall(string)
print(ret) # [],匹配为空

四、复习一下正则表达式

1. 单字符:. : 除换行之外所有字符[]: [aoe][a-w] 匹配集合中任意一个字符\\d: 数字 [0-9]\\D: 非数字\\w: 数字、子母、下划线、中文\\W: 非\\w\\s: 所有的空白字符\\S: 非空白字符2. 数量修饰:*:任意次数 >=0+: 至少1次 >=1?: 可有可无 0次或者1次{m}: 固定m次{m,}: 至少m次{m,n}: m-n次3. 边界:^: 以…开头$: 以…结尾4. 分组:(): 视为一个整体(ab){4}:视为一个整体,匹配次数(): 子模式\\组模式 \\1 \\25. 取消贪婪模式.*?.+?6. 查找match: 只从开头开始找search: 从任意位置开始找findall: 找所有

1. 分组子模式

import re
string = \’\’\'<p><div><span>猪八戒</span></div></p>\’\’\’
pattern = re.compile(r\’^<(\\w+)><(\\w+)>\\w+</\\2></\\1>\’)
ret = pattern.search(string)
print(ret) # <_sre.SRE_Match object; span=(3, 30), match=\'<div><span>猪八戒</span></div>\’>

到此这篇关于正则表达式中(?s)与(?m)的区别的文章就介绍到这了,更多相关正则表达式内容请搜索悠久资源网以前的文章或继续浏览下面的相关文章希望大家以后多多支持悠久资源网!

您可能感兴趣的文章:

  • 正则表达式(?=)正向先行断言实战案例
  • 正则表达式中.+?与.*?的区别
  • 正则表达式中问号(?)的正确用法详解
  • 正则表达式中的 .*? 或 .*+ 的意思
  • 解析正则表达式中的.*,.*?,.+?的含义
  • 还不会正则表达式?赶快看这篇!
  • 正则表达式惰性匹配模式(?)
  • 一个正则表达式的看法(?:)

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

悠久资源 正则表达式 正则表达式中(?s)与(?m)的区别解析 https://www.u-9.cn/biancheng/zhengze/181271.html

常见问题

相关文章

发表评论
暂无评论
官方客服团队

为您解决烦忧 - 24小时在线 专业服务