re正則模組

2022-09-15 04:48:14 字數 3363 閱讀 3534

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 ...