pythonRegex(8)--分組、後向引用、前(後)向斷言

來源:互聯網
上載者:User

標籤:字元   通過   error   表達   位置   表示   必須   file   使用   

無名、有名分組(1)Regex—無名分組

從正則表 達式的左邊開始看,看到的第一個左括弧“(”表示表示第一個分組,第二個表示第二個分組, 依次類推。

需要注意的是,有一個隱含的全域分組(就是索引號為0的分組),就是整個正則 運算式匹配的結果

 

(2)Regex—有名分組

命名分組就是給具體有預設分組編號的組另外再起一個別名,方便以後的引用。 命令分組的文法格式如下: (?P<name>Regex)

 

文法格式中的字元P必須是大寫的“P”,name是一個合法的標識符,表示分組的別名。

s = "ip=‘230.192.168.78‘,version=‘1.0.0‘"

res = re.search(r"ip=‘(?P<ip>\d+\.\d+\.\d+\.\d+).*", s)

print res.group(‘ip‘)#通過命名分組引用分組

 

Regex—後向引用

當用“()”定義了一個Regex分組後,正則引擎就會把匹配的組按照順序進行編號,然後存 入緩衝中。這樣我們就可以在後面對已經匹配過的內容進行引用,這就叫後向引用。

(1)通過索引引用

\數字 \1表示引用第一個分組,\2引用第二個分組,以此類推,\n引用第n個組,而\0則表示引用整個 被匹配的Regex本身。

 

交換字串的位置

import re

s = ‘abc.xyz‘ # 交換.號兩邊的字串

res = re.sub(r‘(.*)\.(.*)‘, r‘\2.\1‘, s)

print res

>>>xyz.abc

 

(2) (?P=name)通過命名分組名進行引用

(?P=name) 字元P必須是大寫的P,name表示命名分組的分組名

 

(?P<name>)(?P=name) 引用分組的值匹配值必須與第一個分組匹配值相等才能匹配到

例如:

1)    引用前一個分組,前後值相同都是2,故能匹配到

>>> re.match(r‘(?P<xst>\d)(?P=xst)‘,‘22‘).groups()

(‘2‘,)

>>> re.match(r‘(?P<xst>\d)(?P=xst)‘,‘22‘).group()

‘22‘

2)    引用前一個分組,前後值不相同分別為2和3,故不能匹配到

>>> re.match(r‘(?P<xst>\d)(?P=xst)‘,‘23‘).group()

Traceback (most recent call last):

File "<stdin>", line 1, in <module>

AttributeError: ‘NoneType‘ object has no attribute ‘group‘

 

Regex—前後向斷言(1)前向肯定斷言與後向肯定斷言1)    前向肯定斷言的文法:

(?<=pattern) 前向肯定斷言表示你希望匹配的字串前面是pattern匹配的內容時,才匹配。

2)    後向肯定斷言的文法:

(?=pattern) 後向肯定斷言表示你希望匹配的字串的後面是pattern匹配的內容時,才匹配

 

3)前後向斷言同時使用

如果在一次匹配過程中,需要同時用到前向肯定斷言和後向肯定斷 言時,那你必須將前向肯定斷言運算式寫在要匹配的Regex的前面,而後向肯定斷言表 達式寫在你要匹配的字串的後面

 

(2) 前向否定斷言與後向否定斷言1) 前向否定斷言的文法:

(?<!pattern) 前向否定斷言表示你希望匹配的字串的前面不是pattern匹配的內容時,才匹配.

2) 後向否定斷言的文法:

(?!pattern) 後向否定斷言表示你希望匹配的字串後面不是pattern匹配的內容時,才匹配。

 

(3)注意

前向肯定(否定)斷言括弧中的Regex必須是能確定長度的Regex,比如\w{3},而不能寫成 \w*或者\w+或者\w?等這種不能確定個數的正則模式符。

pythonRegex(8)--分組、後向引用、前(後)向斷言

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.