正則表達(dá)式中(?s)與(?m)的區(qū)別解析
正則表達(dá)式中(?s)與(?m)的區(qū)別
理論:
(?m) 和 (?s) 是正則表達(dá)式中的兩個(gè)模式標(biāo)志,它們具有不同的作用:
1.(?m) 多行模式標(biāo)志(也稱為 “multiline” 模式):
- 默認(rèn)情況下,正則表達(dá)式將整個(gè)輸入字符串視為單行
- 多行文本中使用該標(biāo)志時(shí),正則表達(dá)式會(huì)匹配每一行
2.(?s) 單行模式標(biāo)志(也稱為 “dotall” 模式):
- 默認(rèn)情況下,. 元字符匹配除了換行符之外的任意字符。
- 當(dāng)使用 單行模式標(biāo)志時(shí),. 元字符將匹配包括換行符在內(nèi)的任意字符。
實(shí)踐:
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']
正則表達(dá)式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>沁園春-雪 北國(guó)風(fēng)光 千里冰封 萬里雪飄 望長(zhǎng)城內(nèi)外 惟余莽莽 大河上下 頓失滔滔 山舞銀蛇 原馳蠟象 欲與天公試比高 </div>''' pattern = re.compile(r'^<div>(.*?)</div>',re.S) # re.S 單行模式 ret = pattern.findall(string) print(ret) # ['沁園春-雪\n北國(guó)風(fēng)光\n千里冰封\n萬里雪飄\n望長(zhǎng)城內(nèi)外\n惟余莽莽\n大河上下\n頓失滔滔\n山舞銀蛇\(yùn)n原馳蠟象\n欲與天公試比高\(yùn)n']
【.】可以匹配除換行符之外的所有字符,當(dāng)設(shè)置成re.S之后,可以簡(jiǎn)單理解為:【.】可以匹配換行符,所以【.】可以匹配所有字符
3. \w+不能匹配換行符
import re string = '''<div>沁園春-雪 北國(guó)風(fēng)光 千里冰封 萬里雪飄 望長(zhǎng)城內(nèi)外 惟余莽莽 大河上下 頓失滔滔 山舞銀蛇 原馳蠟象 欲與天公試比高 </div>''' pattern = re.compile(r'^<div>(\w+)</div>',re.S) # re.S 單行模式 ret = pattern.findall(string) print(ret) # [],匹配為空
四、復(fù)習(xí)一下正則表達(dá)式
1. 單字符:
. : 除換行之外所有字符
[]: [aoe][a-w] 匹配集合中任意一個(gè)字符
\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. 分組:
(): 視為一個(gè)整體
(ab){4}:視為一個(gè)整體,匹配次數(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)于正則表達(dá)式中(?s)與(?m)的區(qū)別的文章就介紹到這了,更多相關(guān)正則表達(dá)式內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
解決preg_match匹配過多字符長(zhǎng)度的限制的思路分析
今天在寫采集程序的時(shí)候,使用到了preg_match,但是有幾個(gè)頁(yè)面始終采集不下來。反復(fù)看了N遍的正則,沒有發(fā)現(xiàn)有問題。于是開始懷疑preg_match是否對(duì)匹配的字符串有長(zhǎng)度限制2012-09-09
c# 正則表達(dá)式對(duì)網(wǎng)頁(yè)進(jìn)行有效內(nèi)容抽取
本問主要總結(jié)了用正則表達(dá)式對(duì)網(wǎng)頁(yè)進(jìn)行有效內(nèi)容提取的具體實(shí)現(xiàn)方法,并給出了c#代碼2009-03-03
只能是字母或數(shù)字或者是字母和數(shù)字的組合的正則previousSibling
只能是字母或數(shù)字或者是字母和數(shù)字的組合的正則previousSibling...2007-03-03
正則表達(dá)式(RegExp)判斷文本框中是否包含特殊符號(hào)
有時(shí),我們希望判斷文本框中用戶輸入的字符是否含有特殊符號(hào)(*/#$@),就像用戶注冊(cè)時(shí)密碼框的填寫。下面小編給大家分享一個(gè)demo,感興趣的朋友一起看看吧2019-10-10
js使用正則子表達(dá)式匹配首字母與尾字母相同單詞的方法
這篇文章主要介紹了js使用正則子表達(dá)式匹配首字母與尾字母相同單詞的方法,可實(shí)現(xiàn)將多行文本框中首位字母相同的單詞進(jìn)行匹配的功能,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-01-01
正則表達(dá)式學(xué)習(xí)經(jīng)驗(yàn)分析
正則表達(dá)式用來指定字符串模式。當(dāng)你需要定位匹配某種模式的字符串時(shí)就可以使用正則表達(dá)式。例如,我們下面的一個(gè)例程就是在一個(gè)HTML文件中通過查找字符串模式<a href="...">來定位所有的超鏈接。2008-05-05
正則表達(dá)式中的正向預(yù)查和負(fù)向預(yù)查實(shí)例分析
這篇文章主要介紹了正則表達(dá)式中的正向預(yù)查和負(fù)向預(yù)查,實(shí)例分析了正向預(yù)查和負(fù)向預(yù)查的概念與具體用法,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-01-01

