Python 正規表示式(分組)

2021-09-07 18:43:54 字數 2536 閱讀 8458

分組就是用一對圓括號「()」括起來的正規表示式,匹配出的內容就表示乙個分組。從正規表示式的左邊開始看,看到的第乙個左括號「(」表示第乙個分組,第二個表示第二個分組,依次類推,需要注意的是,有乙個隱含的全域性分組(就是0),就是整個正規表示式。

分完組以後,要想獲得某個分組的內容,直接使用group(num)和groups()函式去直接提取就行。

>>> s='更多

dfsl

'>>>

print re.search(r'(.*)',s).group(1)

更多

或者

>>> 

print re.match(r'.*(.*)',s).group(1)

更多

按照上面的分組匹配以後,我們就可以拿到我們想拿到的字串,但是如果我們正規表示式中括號比較多,那我們在拿我們想要的字串時,要去挨個數我們想要的字串時第幾個括號,這樣會很麻煩,這個時候python又引入了另一種分組,那就是命名分組,上面的叫無名分組。

命名分組就是給具有預設分組編號的組另外再給乙個別名。命名分組的語法格式如下:

(?p

正規表示式)#name是乙個合法的識別符號

>>> s = "ip='230.192.168.78',version='1.0.0'"

>>> re.search(r"ip='(?p\d+\.\d+\.\d+\.\d+).*", s)

>>> res.group('ip')#通過命名分組引用分組

'230.192.168.78'

正規表示式中,放在圓括號「()」中的表示是乙個組。然後你可以對整個組使用一些正則操作,例如重複操作符。

要注意的是,只有圓括號」()」才能用於形成組。」「用於定義字符集。」{}」用於定義重複操作。

當用」()」定義了乙個正規表示式組後,正則引擎則會把被匹配的組按照順序編號,存入快取。這樣我們想在後面對已經匹配過的內容進行引用時,就可以用」\數字」的方式或者是通過命名分組進行」(?p=name)「進行引用。\1表示引用第乙個分組,\2引用第二個分組,以此類推,\n引用第n個組。而\0則引用整個被匹配的正規表示式本身。這些引用都必須是在正規表示式中才有效,用於匹配一些重複的字串。

如:

#通過命名分組進行後向引用

>>> re.search(r'(?pgo)\s+(?p=name)\s+(?p=name)', 'go go go').group('name')

'go'

#通過預設分組編號進行後向引用

>>> re.search(r'(go)\s+\1\s+\1', 'go go go').group()

'go go go'

交換字串的位置

>>> s = 'abc.xyz'

>>> re.sub(r'(.*)\.(.*)', r'\2.\1', s)

'xyz.abc'

前向肯定斷言的語法:

(?=pattern)
後向肯定斷言的語法:

(?<=pattern)
需要注意的是,如果在匹配的過程中,需要同時用到前向肯定斷言和後向肯定斷言,那麼必須將後向肯定斷言寫在正則語句的前面,前向肯定斷言寫在正則語句的後面,表示後向肯定模式之後,前行肯定模式之前。

如:獲取c語言**中的注釋內容

>>> s1='''char *a="hello world"; char b='c'; /* this is comment */ int c=1; /* t

his is multiline comment */'''

>>> re.findall( r'(?<=/\*).+?(?=\*/)' , s1 ,re.m|re.s)

[' this is comment ', ' this is multiline comment ']

(?<=/*)這個是後向肯定斷言,表示「/*」之後。(?=*/)這個為前向肯定斷言,表示「*/」之前,這兩合併起來就是乙個區間了,所以後向肯定斷言放在前向肯定斷言前面。

前向否定斷言語法:

(?!pattern)
後向否定斷言語法:

(?)
前向否定和後向否定例項:

#提取不是.txt結尾的檔案

>>> f1 = 'aaa.txt'

>>> re.findall(r'.*\..*$(?,f1)

#提取不以數字開頭的檔案

>>> re.findall(r'^(?!\d+).*','1txt.txt')

#提取不以數字開頭不以py結尾的檔案

>>> re.findall(r'^(?!\d+).+?\..*$(?,'test.py')

>>> re.findall(r'^(?!\d+).+?\..*$(?,'test.txt')

['test.txt']

正規表示式 分組

正規表示式對於單個字元的重複,非常方便。比如 d 表示1個或多個數字,表示重複0次或多次 重複1次或多次 重複0次或1次 重複n次 重複n次或多次 重複n次到m次 指定的字元後加特定的限定符,即可實現單字元的重複,那麼,對於一組字串的重複,正規表示式該如何操作?用小括號來指定子表示式 或稱分組 對指...

分組 正規表示式

在正規表示式中,可以用小括號將一些規則括起來當作分組,分組可以作為乙個元字元來看待。d d這是乙個簡單的且不完善的匹配 ip 位址的正規表示式,因為它除了能匹配正確的 ip 位址外,還能匹配如 322.197.578.888 這種不存在的 ip 位址。當然,用這個表示式簡單匹配成功後可以在利用 ph...

正規表示式 分組

group 分組 分了幾組就看分了幾個小括號 分了幾對小括號 當有巢狀的小括號時,怎麼區分那個是第一組那個是第二組呢?只需要數小括號邊的左小括號,看到第乙個左小括號就是第一組,第二個左小括號就是第二組 group 分組 public class test8 3到5位的數字 a z 2位的字母 a z...