正則表達式中(?s)與(?m)的區(qū)別解析
正則表達式中(?s)與(?m)的區(qū)別
理論:
(?m) 和 (?s) 是正則表達式中的兩個模式標(biāo)志,它們具有不同的作用:
1.(?m) 多行模式標(biāo)志(也稱為 “multiline” 模式):
- 默認情況下,正則表達式將整個輸入字符串視為單行
- 多行文本中使用該標(biāo)志時,正則表達式會匹配每一行
2.(?s) 單行模式標(biāo)志(也稱為 “dotall” 模式):
- 默認情況下,. 元字符匹配除了換行符之外的任意字符。
- 當(dāng)使用 單行模式標(biāo)志時,. 元字符將匹配包括換行符在內(nèi)的任意字符。
實踐:
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 # 導(dǎo)入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>沁園春-雪 北國風(fēng)光 千里冰封 萬里雪飄 望長城內(nèi)外 惟余莽莽 大河上下 頓失滔滔 山舞銀蛇 原馳蠟象 欲與天公試比高 </div>''' pattern = re.compile(r'^<div>(.*?)</div>',re.S) # re.S 單行模式 ret = pattern.findall(string) print(ret) # ['沁園春-雪\n北國風(fēng)光\n千里冰封\n萬里雪飄\n望長城內(nèi)外\n惟余莽莽\n大河上下\n頓失滔滔\n山舞銀蛇\n原馳蠟象\n欲與天公試比高\n']
【.】可以匹配除換行符之外的所有字符,當(dāng)設(shè)置成re.S之后,可以簡單理解為:【.】可以匹配換行符,所以【.】可以匹配所有字符
3. \w+不能匹配換行符
import re string = '''<div>沁園春-雪 北國風(fēng)光 千里冰封 萬里雪飄 望長城內(nèi)外 惟余莽莽 大河上下 頓失滔滔 山舞銀蛇 原馳蠟象 欲與天公試比高 </div>''' pattern = re.compile(r'^<div>(\w+)</div>',re.S) # re.S 單行模式 ret = pattern.findall(string) print(ret) # [],匹配為空
四、復(fù)習(xí)一下正則表達式
1. 單字符:
. : 除換行之外所有字符
[]: [aoe][a-w] 匹配集合中任意一個字符
\d: 數(shù)字 [0-9]
\D: 非數(shù)字
\w: 數(shù)字、子母、下劃線、中文
\W: 非\w
\s: 所有的空白字符
\S: 非空白字符
2. 數(shù)量修飾:
*:任意次數(shù) >=0
+: 至少1次 >=1
?: 可有可無 0次或者1次
{m}: 固定m次
{m,}: 至少m次
{m,n}: m-n次
3. 邊界:
^: 以...開頭
$: 以...結(jié)尾
4. 分組:
(): 視為一個整體
(ab){4}:視為一個整體,匹配次數(shù)
(): 子模式\組模式 \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>'>
到此這篇關(guān)于正則表達式中(?s)與(?m)的區(qū)別的文章就介紹到這了,更多相關(guān)正則表達式內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
用Javascript正則實現(xiàn)url鏈接的解析類
一個非常健全的 Javascript 鏈接(URL)解析類,他用了正則表達式可以準(zhǔn)確獲取一個完整的 URL 中每個部分的內(nèi)容,包括協(xié)議、URL中包含的用戶名和密碼、主機名、端口、路徑名、參數(shù)、錨點(Fragment Anchor)等信息2008-06-06正則表達式基礎(chǔ)教程 regular expression
正則表達式基礎(chǔ)教程 regular expression...2007-03-03