|
正则表达式中(?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模块
二、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>'> |