正則表達式中(?s)與(?m)的區(qū)別解析
正則表達式中(?s)與(?m)的區(qū)別
理論:
(?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的區(qū)別
一、python中的re模塊
import re # 導入re模塊
二、re.S與re.M的區(qū)別
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)的區(qū)別的文章就介紹到這了,更多相關正則表達式內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

