日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

RE正则的常规用法

發(fā)布時間:2025/7/25 编程问答 19 豆豆
生活随笔 收集整理的這篇文章主要介紹了 RE正则的常规用法 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

1.re的簡介 使用python的re模塊,盡管不能滿足所有復(fù)雜的匹配情況,但足夠在絕大多數(shù)情況下能夠有效地實現(xiàn)對復(fù)雜字符串的分析并提取出相關(guān)信息。python 會將正則表達(dá)式轉(zhuǎn)化為字節(jié)碼,利用 C 語言的匹配引擎進(jìn)行深度優(yōu)先的匹配。

復(fù)制代碼 代碼如下: import re print re.__doc__


可以查詢re模塊的功能信息,下面會結(jié)合幾個例子說明。
2.re的正則表達(dá)式語法 正則表達(dá)式語法表如下:

語法 意義 說明
"." 任意字符 ?
"^" 字符串開始 '^hello'匹配'helloworld'而不匹配'aaaahellobbb'
"$" 字符串結(jié)尾 與上同理
"*" 0 個或多個字符(貪婪匹配)<*>匹配<title>chinaunix</title>
"+"1 個或多個字符(貪婪匹配與上同理
"?"0 個或多個字符(貪婪匹配與上同理
*?,+?,??以上三個取第一個匹配結(jié)果(非貪婪匹配<*>匹配<title>
{m,n}對于前一個字符重復(fù)m到n次,{m}亦可a{6}匹配6個a、a{2,4}匹配2到4個a
{m,n}?對于前一個字符重復(fù)m到n次,并取盡可能少‘a(chǎn)aaaaa'中a{2,4}只會匹配2個
"\\"特殊字符轉(zhuǎn)義或者特殊序列 ?
[]表示一個字符集 [0-9]、[a-z]、[A-Z]、[^0]
"|"A|B,或運(yùn)算
(...)匹配括號中任意表達(dá)式 ?
(?#...)注釋,可忽略 ?
(?=...)Matches if ... matches next, but doesn't consume the string.'(?=test)'? 在hellotest中匹配hello
(?!...)Matches if ... doesn't match next.'(?!=test)'? 若hello后面不為test,匹配hello
(?<=...) Matches if preceded by ... (must be fixed length).'(?<=hello)test'? 在hellotest中匹配test
(?<!...)Matches if not preceded by ... (must be fixed length).'(?<!hello)test'? 在hellotest中不匹配test

正則表達(dá)式特殊序列表如下:

特殊序列符號意義
\A只在字符串開始進(jìn)行匹配
\Z只在字符串結(jié)尾進(jìn)行匹配
\b匹配位于開始或結(jié)尾的空字符串
\B匹配不位于開始或結(jié)尾的空字符串
\d相當(dāng)于[0-9]
\D相當(dāng)于[^0-9]
\s匹配任意空白字符:[\t\n\r\r\v]
\S匹配任意非空白字符:[^\t\n\r\r\v]
\w匹配任意數(shù)字和字母:[a-zA-Z0-9]
\W匹配任意非數(shù)字和字母:[^a-zA-Z0-9]

3.re的主要功能函數(shù)

??? 常用的功能函數(shù)包括:compile、search、match、split、findall(finditer)、sub(subn) compile re.compile(pattern[, flags]) 作用:把正則表達(dá)式語法轉(zhuǎn)化成正則表達(dá)式對象 flags定義包括: re.I:忽略大小寫 re.L:表示特殊字符集 \w, \W, \b, \B, \s, \S 依賴于當(dāng)前環(huán)境 re.M:多行模式 re.S:' . '并且包括換行符在內(nèi)的任意字符(注意:' . '不包括換行符) re.U: 表示特殊字符集 \w, \W, \b, \B, \d, \D, \s, \S 依賴于 Unicode 字符屬性數(shù)據(jù)庫

search re.search(pattern, string[, flags]) search (string[, pos[, endpos]]) 作用:在字符串中查找匹配正則表達(dá)式模式的位置,返回 MatchObject 的實例,如果沒有找到匹配的位置,則返回 None。

match re.match(pattern, string[, flags]) match(string[, pos[, endpos]]) 作用:match() 函數(shù)只在字符串的開始位置嘗試匹配正則表達(dá)式,也就是只報告從位置 0 開始的匹配情況,而 search() 函數(shù)是掃描整個字符串來查找匹配。如果想要搜索整個字符串來尋找匹配,應(yīng)當(dāng)用 search()。

下面是幾個例子: 例:最基本的用法,通過re.RegexObject對象調(diào)用

復(fù)制代碼 代碼如下: #!/usr/bin/env python import re r1 = re.compile(r'world') if r1.match('helloworld'): ??? print 'match succeeds' else: ??? print 'match fails' if r1.search('helloworld'): ??? print 'search succeeds' else: ??? print 'search fails'

?

說明一下:r是raw(原始)的意思。因為在表示字符串中有一些轉(zhuǎn)義符,如表示回車'\n'。如果要表示\表需要寫為'\\'。但如果我就是需要表示一個'\'+'n',不用r方式要寫為:'\\n'。但使用r方式則為r'\n'這樣清晰多了。

例:設(shè)置flag

復(fù)制代碼 代碼如下: #r2 = re.compile(r'n$', re.S) #r2 = re.compile('\n$', re.S) r2 = re.compile('World$', re.I) if r2.search('helloworld\n'): ??? print 'search succeeds' else: ??? print 'search fails'

例:直接調(diào)用

復(fù)制代碼 代碼如下: if re.search(r'abc','helloaaabcdworldn'): ??? print 'search succeeds' else: ??? print 'search fails'

?

split re.split(pattern, string[, maxsplit=0, flags=0]) split(string[, maxsplit=0]) 作用:可以將字符串匹配正則表達(dá)式的部分割開并返回一個列表 例:簡單分析ip

復(fù)制代碼 代碼如下: #!/usr/bin/env python import re r1 = re.compile('W+') print r1.split('192.168.1.1') print re.split('(W+)', '192.168.1.1') print re.split('(W+)', '192.168.1.1', 1)

結(jié)果如下: ['192', '168', '1', '1'] ['192', '.', '168', '.', '1', '.', '1'] ['192', '.', '168.1.1']

?

findall re.findall(pattern, string[, flags]) findall(string[, pos[, endpos]]) 作用:在字符串中找到正則表達(dá)式所匹配的所有子串,并組成一個列表返回 例:查找[]包括的內(nèi)容(貪婪和非貪婪查找)

復(fù)制代碼 代碼如下: #!/usr/bin/env python import re r1 = re.compile('([.*])') print re.findall(r1, "hello[hi]heldfsdsf[iwonder]lo") r1 = re.compile('([.*?])') print re.findall(r1, "hello[hi]heldfsdsf[iwonder]lo") print re.findall('[0-9]{2}',"fdskfj1323jfkdj") print re.findall('([0-9][a-z])',"fdskfj1323jfkdj") print re.findall('(?=www)',"afdsfwwwfkdjfsdfsdwww") print re.findall('(?<=www)',"afdsfwwwfkdjfsdfsdwww")

?

finditer re.finditer(pattern, string[, flags]) finditer(string[, pos[, endpos]]) 說明:和 findall 類似,在字符串中找到正則表達(dá)式所匹配的所有子串,并組成一個迭代器返回。同樣 RegexObject 有:

sub re.sub(pattern, repl, string[, count, flags]) sub(repl, string[, count=0]) 說明:在字符串 string 中找到匹配正則表達(dá)式 pattern 的所有子串,用另一個字符串 repl 進(jìn)行替換。如果沒有找到匹配 pattern 的串,則返回未被修改的 string。Repl 既可以是字符串也可以是一個函數(shù)。 例:

復(fù)制代碼 代碼如下: #!/usr/bin/env python import re p = re.compile('(one|two|three)') print p.sub('num', 'one word two words three words apple', 2)

?

subn re.subn(pattern, repl, string[, count, flags]) subn(repl, string[, count=0])

說明:該函數(shù)的功能和 sub() 相同,但它還返回新的字符串以及替換的次數(shù)。同樣 RegexObject 有:

轉(zhuǎn)載于:https://www.cnblogs.com/weiming-cheng/p/4957347.html

總結(jié)

以上是生活随笔為你收集整理的RE正则的常规用法的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。