1.正規表示式的常用符號
'.' 預設匹配除\n之外的任意乙個字元,若指定flag dotall,則匹配任意字元,包括換行'^' 匹配字元開頭,若指定flags multiline,這種也可以匹配上(r"^a","\nabc\neee",flags=re.multiline)
'$' 匹配字元結尾,或e.search("foo$","bfoo\nsdfsf",flags=re.multiline).group()也可以
'*' 匹配*號前的字元0次或多次,re.findall("ab*","cabb3abcbbac") 結果為['abb', 'ab', 'a']
'+' 匹配前乙個字元1次或多次,re.findall("ab+","ab+cd+abb+bba") 結果['ab', 'abb']
'?' 匹配前乙個字元1次或0次
'' 匹配前乙個字元m次
'' 匹配前乙個字元n到m次,re.findall("ab","abb abc abbcbbb") 結果'abb', 'ab', 'abb']
'|' 匹配|左或|右的字元,re.search("abc|abc","abcbabccd").group() 結果'abc'
'(...)' 分組匹配,re.search("(abc)a(123|456)c", "abcabca456c").group() 結果 abcabca456c
'\a' 只從字元開頭匹配,re.search("\aabc","alexabc") 是匹配不到的
'\z' 匹配字元結尾,同$
'\d' 匹配數字0-9
'\d' 匹配非數字
'\w' 匹配[a-za-z0-9]
'\w' 匹配非[a-za-z0-9]
's' 匹配空白字元、\t、\n、\r , re.search("\s+","ab\tc1\n3").group() 結果 '\t'
二、常用語法
2.1 re.match 從頭開始匹配
re.mathch(pattern,string,flags)
#匹配開頭成功>>> a=re.match("i",'inet 172.17.0.1 netmask 255.255.0.0 broadcast 0.0.0.0')
>>> a.group()
'i'# 匹配開頭失敗
>>> a=re.match("n",'inet 172.17.0.1 netmask 255.255.0.0 broadcast 0.0.0.0')
>>> a.group()
traceback (most recent call last):
file "", line 1, in attributeerror: 'nonetype' object has no attribute 'group'
>>> print(a)
none
#\w匹配 (不匹配特殊字元 空格等)
>>> a=re.match("\w",'inet 172.17.0.1 netmask 255.255.0.0 broadcast 0.0.0.0')
>>> a.group()
'inet'
2.2 re.search
re.search函式會在字串內查詢模式匹配,只到找到第乙個匹配然後返回,如果字串沒有匹配,則返回none。
>>> a=re.search("\d+","sd234345resss")>>> a.group()
'234345'
2.3 group 和 groups
>>> a=re.search("([a-z]*)(\d+)([a-z]*)","sd234345resss").group()>>> a
'sd234345resss'
>>> a=re.search("([a-z]*)(\d+)([a-z]*)","sd234345resss").group(0)
>>> a
'sd234345resss'
>>> a=re.search("([a-z]*)(\d+)([a-z]*)","sd234345resss").group(1)
>>> a
'sd'
>>> a=re.search("([a-z]*)(\d+)([a-z]*)","sd234345resss").group(2)
>>> a
'234345'
>>> a=re.search("([a-z]*)(\d+)([a-z]*)","sd234345resss").group(3)
>>> a
'resss'
>>> a=re.search("([a-z]*)(\d+)([a-z]*)","sd234345resss").groups()
>>> a
('sd', '234345', 'resss')
2.4 re.findall(pattern,string,flags=0)
上述兩中方式均用於匹配單值,即:只能匹配字串中的乙個,如果想要匹配到字串中所有符合條件的元素,則需要使用 findall。
>>> a=re.findall("\d+","sd234/34*5resss")>>> a
['234', '34', '5']
2.5 re.sub(pattern,repl,string,count=0,flags=0)
替換匹配到的字串
>>> s="123abc456">>> a=re.sub("\d+","sub",s)
>>> a
'subabcsub'
s="123abc456"a=re.sub("\d+","sub",s,count=1)
>>> a
'subabc456'
相比於str.replace功能更強大
2.6 re.split(pattern, string, maxsplit=0, flags=0)
根據指定匹配進行分組
s="123aaa345bbb789ccc">>> a=re.split("[a-z]*",s)
>>> a
['123', '345', '789', '']
>>> a=re.split("[a-z]*",s,1)
>>> a
['123', '345bbb789ccc']
>>> a=re.split("[a-z]*",s,2)
>>> a
['123', '345', '789ccc']
正則re模組
匹配任意乙個字元 以某個字元開頭 以某個字元結尾 匹配0次或多次 匹配一次或多次 匹配0次或1次 匹配n次 匹配n次或多次 匹配n次到m次 字符集,非 a z 匹配小寫字母a到z的任意字母一次 a z 匹配除了小寫字母a到z之外的任意字元一次 d 匹配數字0 9,0次或多次 d匹配任何十進位制數,0...
re模組和正則
正規表示式 就是用來篩選字串中特定內容的一串具有某種邏輯規則的字元組成。正規表示式不是python獨有的,而是一門獨立的技術,它在所有的程式語言中都有使用,在python中使用就必須依賴於re模組。正則的應用場景 比如,爬蟲,資料分析。正則的使用某些特定邏輯的字元構造的 可以簡化我們的 的冗餘。看以...
python 正則re模組
1.正則各種字元表示的含義 預設匹配除 n之外的任意乙個字元,若指定flag dotall,則匹配任意字元,包括換行 匹配字元開頭 匹配 號前的字元0次或多次,re.findall ab cabb3abcbbac 結果為 abb ab a 匹配前乙個字元1次或多次,re.findall ab ab ...