Python語言及其應用
7.1.3使用正則表達式匹配
正則表達式使用:首先需要定義一個用於匹配的模式(pattern)字符串和一個匹配的對象:源(source)字符串,如下,
Result = re.match(‘’You,’Young France’)
這里的 “You”是模式,“Young France”是源——你想檢查的字符串。函數用於查看源是否以模式開頭。
以下列出幾種匹配方法,
match( )以某某開頭作精准匹配,
search( )會返回第一次成功匹配,如果存在的話
findall( )會返回所有不重疊的匹配,如果存在的話
split( )會根據pattern將source切分成若干段,返回由這些片段組成的列表
sub( )還需要一個額外的參數repacement,他會把source中所有匹配pattern給出replacement
1、使用match( )進行精准匹配
[root@promethus te]# python
Python 3.6.3 |Anaconda, Inc.| (default, Oct 13 2017, 12:02:49)
[GCC 7.2.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import re
>>> aaa = 'Young FranceYou'
>>> m = re.match('You', aaa)
>>> print(m)
<_sre.SRE_Match object; span=(0, 3), match='You'>
>>> print(m.group())
You
>>> n = re.match('.*Fran', aaa)
>>> print (n)
<_sre.SRE_Match object; span=(0, 10), match='Young Fran'>
>>> print (n.group())
Young Fran
>>>
以下對新模式能夠匹配成功的解釋:
.代表任何單一字符;
*代表任意一個它之前的字符,.*代表任意多個字符(包括0個)
2、使用search( )尋找首次匹配
使用search('Frank', aaa)查找任意位置的“Frank”或“Fran”,無需通配符。
3、使用findall( )尋找所有匹配
結合.*?匹配規則進行。
4、使用split ( )按匹配切分
將一個字符串切分成由一系列的子串組成的列表
5、使用sub ( )替換匹配
6、模式:特殊字符歸類
模式 匹配
\d 一個數字字符
\D 一個非數字字符
\w 一個字母或數字字符
\W 一個非字母非數字字符
\s 空白符
\S 非空白符
\b 單詞邊界(一個\w與\W之間的范圍,順序可逆)
\B 非單詞邊界
驗證操作
7、模式:使用標識符
模式 匹配
abc 文本值abc
. 除\n外的任何字符
^ 源字符串的開頭
$ 源字符串的結尾
prev? 0個或1個prev
prev* 0個或多個prev,盡可能多的匹配
prev*? 0個或多個prev,盡可能少的匹配
prev+ 1個或多個prev,盡可能多的匹配
prev+? 1個或多個prev,盡可能少的匹配
prev{m} m個連續的prev
prev{m,n} m到n個連續的prev,盡可能多的匹配
prev{m,n} m到n個連續的prev,盡可能少的匹配
[abc] a或b或c,跟[a|b|c]一樣
[^abc] 非(a或b或c)
prev(?=next) 如果后面為next,返回prev
prev(?!next) 如果后面為非next,返回prev
(?<=prev)next 如果前面為prev,返回next
(?<!prev)next 如果前面為非prev,返回next
示例
>>> sour = '''I wish I may, I wish I might
... Have a dish of fish toight.'''
>>> re.findall('wish', sour)
['wish', 'wish']
8、模式:定義匹配的輸出
當使用時match( )或search( )時,所有的匹配會以的形式返回對象m.group()中,如果你用括號將某一個模式包裹起來,括號中模式匹配得到的結果歸自己的group中,而調用m.groups()可以得到包含這些匹配的元祖,如下,
>>> import re
>>> sour = '''I wish I may, I wish I might
... Have a dish of fish toight.'''
>>> m = re.search(r'(?P<DISH>. dish\b).*(?P<FISH>\bfish)', sour)
>>> m.group()
自此,完成正則匹配基本功能。