標籤: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