pythonRegex

來源:互聯網
上載者:User

標籤:split   ble   不同   定位字元   pytho   match   迭代器   std   adc   

Regex並不是python的一部分。Regex是用於處理字串的強大工具,擁有自己獨特的文法以及一個獨立的處理引擎,效率上可能不如str內建的方法,但功能十分強大。

得益於這一點,再提供Regex的語言裡,Regex的文法都是一樣的,區別只在於不同的程式設計語言所支援的文法數量不一樣。

Regex的大致匹配過程是:依次拿出運算式和文本中的字串比較,如果每一個字元都能匹配成功,則匹配成功,一旦有匹配不成功的字串則匹配失敗。

下面列出python支援的Regex元字元和文法。

字元
字元 說明 匹配對象 匹配結果
一般字元 匹配自身 abc abc
. 除分行符號之外的任何字元 a.c abc/acc/a2c
逸出字元 逸出字元,使後一個字元改變原有的意思。例如匹配*,可以\* a\*c a*c
[]

字元集。匹配字元集中的任意一個字元。可以縮寫,

比如[0-9]、[A-Z],還有一些特殊的字元,比如說[^...],表示除...之外

[*]匹配*這個字元,在字元集中特殊字元都失去了原有的含義。

a[1-9e-g]c a3c/agc

 

 

 

 

 

 

 

 

預定義字元集
字元 說明 匹配對象 匹配結果
\s 空白字元      a\sc a c
\S 非空白字元 a\Sc a1c 或abc
\d 數字字元

a\dc

a2c
\D 非數字字元 a\Dc adc
\w 數字、字母、底線 a\wc a_c
\W 非數字字母底線 a\Wc a c
\n 分行符號  

 

\t 定位字元  

 

 

 

 

 

 

 

 

 

 

 

 

數量詞
字元 說明 匹配對象 匹配結果
* 匹配0或多個任一字元 李.* 李/李洋/李傑傻...
匹配0或1個任一字元 李.? 李/李傑
+ 匹配1或多個任一字元 李.+ 李洋/李傑傻...
{m} 匹配m個 李{3} 李李李
{m,}/{,n} 匹配0-n或者大於m個 李{2,} 李李李/李李李李/李李李李李..
{m,n} 匹配m到n個字元 李{3,5} 李李李/李李李李/李李李李李..

 

 

 

 

 

 

 

 

邊界匹配
字元 說明 匹配對象 匹配結果
^ 以什麼開頭    
$ 以什麼結尾    
\A 僅匹配字串開頭    
\Z 僅匹配字串結尾    

 

 

 

 

 

 

 

re模組中常用的方法

(1)findall:找到所有符合的對象,返回一個列表

>>> re.findall(‘o‘,‘Hello,world‘)[‘o‘, ‘o‘]>>> re.findall(‘l‘,‘Hello,world‘)[‘l‘, ‘l‘, ‘l‘]

 

(2)search:找到第一個,傳回值用group()列印

>>> re.search(‘l‘,‘Hello,world‘)<_sre.SRE_Match object; span=(2, 3), match=‘l‘>>>> ret = re.search(‘l‘,‘Hello,world‘)>>> ret.group()     #使用group()列印‘l‘

 

(3)match:從開始匹配,傳回值用group()列印

>>> ret1 = re.match(‘l‘,‘Hello,world‘)   #必須匹配的是首字元>>> ret1.group()  Traceback (most recent call last):  File "<stdin>", line 1, in <module>AttributeError: ‘NoneType‘ object has no attribute ‘group‘>>> ret1 = re.match(‘H‘,‘Hello,world‘)>>> ret1.group()‘H‘

 

(4)split:根據Regex的方法分割

>>> ret2 = re.split(‘[ac]‘,‘abcacd‘)>>> ret2[‘‘, ‘b‘, ‘‘, ‘‘, ‘d‘] #以a分割,返回‘‘和‘bcacd#分割bcacd,以c分割,反回一個b#分割acd,以a分割,返回一個空‘‘#分割cd,以c分割,返回一個空‘‘,剩餘一個d不能分割

用Regex切分字串 比用固定的字元更加靈活。

>>> re.split(‘\s‘,‘a b  c‘)[‘a‘, ‘b‘, ‘‘, ‘c‘]>>> re.split(‘\s+‘,‘a b  c‘)  #必須加一個”+“[‘a‘, ‘b‘, ‘c‘]>>> re.split(‘[\s,]‘,‘a, b,  c‘)[‘a‘, ‘‘, ‘b‘, ‘‘, ‘‘, ‘c‘]>>> re.split(‘[\s,]+‘,‘a, b,  c‘)  #有加號就可以匹配多個空格。[‘a‘, ‘b‘, ‘c‘]

 

 

(5)sub/subn:根據Regex的方法替換

>>> re.sub(‘\d‘,‘NUM‘,‘my old is 56‘)‘my old is NUMNUM‘>>> re.subn(‘\d‘,‘NUM‘,‘my old is 56‘)(‘my old is NUMNUM‘, 2)

 

(6)compile:編譯正則,將要匹配的對象提前進行編譯

>>> obj = re.compile(‘123‘)>>> ret4 = re.search(obj,‘abc123456cda‘)>>> ret4.group()‘123‘

 

(7)finditer:返回一個迭代器

>>> ret5 = re.finditer(‘l‘,‘Hello,world‘)>>> ‘__next__‘ in dir(ret5)True

 

pythonRegex

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.