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) 結果: tinafeihahafei2.預定義字符集:
\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 com3、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()不需要參數,返回一個元組,元組中的元就是正則表達式中定義的組。
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', '']?
轉載于:https://www.cnblogs.com/qinyanli/p/8315442.html
與50位技術專家面對面20年技術見證,附贈技術全景圖總結
以上是生活随笔為你收集整理的python --- re模块的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java8之重新认识HashMap(转自
- 下一篇: node创建web静态服务