当前位置: 代码网 > it编程>编程语言>正则表达式 > 正则表达式中(?s)与(?m)的区别解析

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

2024年05月15日 正则表达式 我要评论
正则表达式中(?s)与(?m)的区别理论:(?m) 和 (?s) 是正则表达式中的两个模式标志,它们具有不同的作用:1.(?m) 多行模式标志(也称为 “multiline”

正则表达式中(?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  \2
5. 取消贪婪模式
.*?
.+?
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)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com