python --- re模塊
1.正則表達式的元字符有: . \ * + ? ^ $ {} [ ]
. 匹配除換行符以外的任意字符
\ 轉義字符,使後一個字符改變原來的意思
* 匹配前面字符0或多次
+ 匹配前面字符1或多次
?匹配一個字符0或多次
^ 匹配字符串開頭
$ 匹配字符串結尾
{} {m}匹配前一個字符m次,{m,n}匹配前一個字符m至n次,若省略n,則匹配m至無限次
[] 字符集。對應的位置可以是字符集中任意字符。字符集中的字符可以逐個列出,也可以給出範圍,如[abc]或[a-c].[^abc]表示取反,即非abc.
所有特殊字符在字符集中都失去其原有的特殊含義,用\反斜杠轉義恢復特殊字符的特殊含義
() 被括起來的表達式將作為分組,從表達式左邊開始沒遇到一個分組的左括號“(”,編號+1.
分組表達式作為一個整體,可以後接數量詞。表達式中的|僅在該組中有效。
這裏需要強調一下反斜杠的作用:
反斜杠後面跟元字符去除特殊功能(即將特殊字符轉義成普通字符)
反斜杠後面跟普通字符實現特殊功能 (即預定義字符)
引用序號對應的字組所匹配的字符串
a=re.search(r‘(tina)(fei)haha\2‘,‘tinafeihahafei tinafeihahatina‘).group() print(a) 結果: tinafeihahafei
2.預定義字符集:
\d: 表示數字0-9
\D:非數字
\s:匹配任何空白字符[<空格>\t\r\n\f\v]
\S:非空的字符
\w:匹配包括下劃線的任何字符[a-zA-Z0-9_]
\W:匹配非字母字符,即匹配特殊字符
\A:匹配字符開頭,同^
\z:匹配字符結尾,同$
\b:匹配單詞邊界匹配一個單詞邊界,也就是指單詞和空格間的位置。例如, ‘er\b‘ 可以匹配"never" 中的 ‘er‘,但不能匹配 "verb" 中的 ‘er‘。
\B:和\b相反
這裏需要強調一下\b的單詞邊界的理解: w = re.findall(‘\btina‘,‘tian tinaaaa‘) print(w) s = re.findall(r‘\btina‘,‘tian tinaaaa‘) print(s) v = re.findall(r‘\btina‘,‘tian#tinaaaa‘) print(v) a = re.findall(r‘\btina\b‘,‘tian#tina@aaa‘) print(a) 執行結果如下: [] [‘tina‘] [‘tina‘] [‘tina‘]
三.re模塊中常用功能函數
1.compile()
編譯正則表達式模式,返回一個對象的模式。(可以把那些常用的正則表達式編譯成正則表達式對象,這樣可以提高一點效率。)
格式:
re.compile(pattern,flags=0)
pattern: 編譯時用的表達式字符串。
flags 編譯標誌位,用於修改正則表達式的匹配方式,如:是否區分大小寫,多行匹配等。常用的flags有:
標誌 | 含義 |
re.S(DOTALL) | 使.匹配包括換行在內的所有字符 |
re.I(IGNORECASE) | 使匹配對大小寫不敏感 |
re.L(LOCALE) | 做本地化識別(locale-aware)匹配,法語等 |
re.M(MULTILINE) | 多行匹配,影響^和$ |
re.X(VERBOSE) | 該標誌通過給予更靈活的格式以便將正則表達式寫得更易於理解 |
re.U | 根據Unicode字符集解析字符,這個標誌影響\w,\W,\b,\B |
import re tt = "Tina is a good girl, she is cool, clever, and so on..." rr = re.compile(r‘\w*oo\w*‘) print(rr.findall(tt)) #查找所有包含‘oo‘的單詞 執行結果如下: [‘good‘, ‘cool‘]
2、match()
決定RE是否在字符串剛開始的位置匹配。//註:這個方法並不是完全匹配。當pattern結束時若string還有剩余字符,仍然視為成功。想要完全匹配,可以在表達式末尾加上邊界匹配符‘$‘
格式:
re.match(pattern, string, flags=0)
print(re.match(‘com‘,‘comwww.runcomoob‘).group()) print(re.match(‘com‘,‘Comwww.runcomoob‘,re.I).group()) 執行結果如下: com com
3、search()
格式:
re.search(pattern, string, flags=0)
re.search函數會在字符串內查找模式匹配,只要找到第一個匹配然後返回,如果字符串沒有匹配,則返回None
print(re.search(‘\dcom‘,‘www.4comrunoob.5com‘).group()) 執行結果如下: 4com
*註:match和search一旦匹配成功,就是一個match object對象,而match object對象有以下方法:
- group() 返回被 RE 匹配的字符串
- start() 返回匹配開始的位置
- end() 返回匹配結束的位置
- span() 返回一個元組包含匹配 (開始,結束) 的位置
- group() 返回re整體匹配的字符串,可以一次輸入多個組號,對應組號匹配的字符串。
a. group()返回re整體匹配的字符串,
b. group (n,m) 返回組號為n,m所匹配的字符串,如果組號不存在,則返回indexError異常
c.groups()groups() 方法返回一個包含正則表達式中所有小組字符串的元組,從 1 到所含的小組號,通常groups()不需要參數,返回一個元組,元組中的元就是正則表達式中定義的組。
import re a = "123abc456" print(re.search("([0-9]*)([a-z]*)([0-9]*)",a).group(0)) #123abc456,返回整體 print(re.search("([0-9]*)([a-z]*)([0-9]*)",a).group(1)) #123 print(re.search("([0-9]*)([a-z]*)([0-9]*)",a).group(2)) #abc print(re.search("([0-9]*)([a-z]*)([0-9]*)",a).group(3)) #456 ###group(1) 列出第一個括號匹配部分,group(2) 列出第二個括號匹配部分,group(3) 列出第三個括號匹配部分。###
4、findall()
re.findall遍歷匹配,可以獲取字符串中所有匹配的字符串,返回一個列表。
格式:
re.findall(pattern, string, flags=0)
p = re.compile(r‘\d+‘) print(p.findall(‘o1n2m3k4‘)) 執行結果如下: [‘1‘, ‘2‘, ‘3‘, ‘4‘]
import re tt = "Tina is a good girl, she is cool, clever, and so on..." rr = re.compile(r‘\w*oo\w*‘) print(rr.findall(tt)) print(re.findall(r‘(\w)*oo(\w)‘,tt))#()表示子表達式 執行結果如下: [‘good‘, ‘cool‘] [(‘g‘, ‘d‘), (‘c‘, ‘l‘)]
5、finditer()
搜索string,返回一個順序訪問每一個匹配結果(Match對象)的叠代器。找到 RE 匹配的所有子串,並把它們作為一個叠代器返回。
格式:
re.finditer(pattern, string, flags=0)
iter = re.finditer(r‘\d+‘,‘12 drumm44ers drumming, 11 ... 10 ...‘) for i in iter: print(i) print(i.group()) print(i.span()) 執行結果如下: <_sre.SRE_Match object; span=(0, 2), match=‘12‘> 12 (0, 2) <_sre.SRE_Match object; span=(8, 10), match=‘44‘> 44 (8, 10) <_sre.SRE_Match object; span=(24, 26), match=‘11‘> 11 (24, 26) <_sre.SRE_Match object; span=(31, 33), match=‘10‘> 10 (31, 33)
6、split()
按照能夠匹配的子串將string分割後返回列表。
可以使用re.split來分割字符串,如:re.split(r‘\s+‘, text);將字符串按空格分割成一個單詞列表。
格式:
re.split(pattern, string[, maxsplit])
maxsplit用於指定最大分割次數,不指定將全部分割
print(re.split(‘\d+‘,‘one1two2three3four4five5‘)) 執行結果如下: [‘one‘, ‘two‘, ‘three‘, ‘four‘, ‘five‘, ‘‘]
print(re.split(‘\d+‘,‘one1two2three3four4five5‘)) 執行結果如下: [‘one‘, ‘two‘, ‘three‘, ‘four‘, ‘five‘, ‘‘]
python --- re模塊