匯入re模組(下面的小例子前兩句省略)
# -*- coding:utf-8 -*-
import re
str = 're python'
#r代表原字串,不使用原字串要注意轉義
p = re.compile(r're')
print type(p)
m = p.match(str)
print m.groups()
print m.span()
print m.string
輸出結果
re
(0, 2)
re python
字元匹配.
匹配任意字元(除了\n)
[…]例如[0-9a-za-z]匹配字符集
\d或\d
匹配數字/非數字
\s或\s
匹配空白/非空白字元
\w或\w
匹配單詞字元[a-za-z0-9]/(空格)非單詞字元
注意下面這個轉義的使用
m = re.match(r'\[[\w]\]','[a]')
print m.group()
輸出結果為:
[a]
字元匹配*
匹配前乙個字元0次或者無限次
+匹配前乙個字元1次或者無限次
?匹配前乙個字元0次或者1次
/匹配前乙個字元m次或者m到n次
*?/+?/??
匹配模式變為非貪婪(盡可能少匹配字元)
下面是上述匹配的一些小例子,有助於更好的理解多個字元匹配:
m = re.match(r'[a-z][a-z]','aaaaa')
print m.group()
//aa
m = re.match(r'[a-z][a-z]*','aaaaa')
print m.group()
//aaaaa
m = re.match(r'[a-z][a-z]+','aaaaa')
print m.group()
//aaaaa
#匹配python變數名(以下劃線,字元開頭)
m = re.match(r'[_a-za-z]+[_\w]*','_ht8')
print m.group()
//_ht8
m = re.match(r'[_a-za-z]+[_\w]*','ath')
print m.group()
//ath
#匹配0-99
m = re.match(r'[1-9]?[0-9]','99')
print m.group()
//99
m = re.match(r'[1-9]?[0-9]','19')
print m.group()
//19
m = re.match(r'[1-9]?[0-9]','9')
print m.group()
//9
#前乙個字元沒有0,所以後面的沒有匹配
m = re.match(r'[1-9]?[0-9]','09')
print m.group()
//0#匹配qq郵箱或者163郵箱
m = re.match(r'[a-za-z0-9]@163.com','[email protected]')
print m.group()
m = re.match(r'[0-9][a-z]*?','1ad12343')
print m.group()
//1
m = re.match(r'[0-9][a-z]+?','1ad12343')
print m.group()
//1a
m = re.match(r'[0-9][a-z]??','1ad12343')
print m.group()
//1
字元匹配^
匹配字串開頭
$匹配字串結尾
\a或\z
指定的字串匹配必須出現在開頭有/結尾
匹配小例子:
# -*- coding:utf-8 -*-
import re
#匹配163郵箱
m = re.match(r'^[\w]@163.com$','[email protected]')
print m.group()
m = re.match(r'\axuna[\w]*','xunalove123')
print m.group()
//xunalove123
字元
匹配匹配左右任意乙個表示式
(ab)
括號中表示式作為乙個分組
\引用編號為num的分組匹配到的字串
(?p)
分組起乙個別名
(?p=name)
引用別名為name的分組匹配字串
演示小例子
m = re.match(r'abc|d','abc')
print m.group()
//abc
#匹配0-99組成的任意字串
m = re.match(r'[1-9]?\d$','99')
print m.group()
//99
m = re.match(r'[1-9]?\d$','9')
print m.group()
//9
m = re.match(r'[1-9]?\d$|100','100')
print m.group()
//100
#匹配郵箱
m = re.match(r'[\w]?@(163|126|qq).com','[email protected]')
print m.group()
m = re.match(r'<([\w]+>)\1','book>')
print m.group()
//book>
m = re.match(r'<([\w]+>)[\w]+python')
print m.group()
//python
m = re.match(r'<(?p[\w]+>)[\w]+python')
print m.group()
//python
match方法是用頭開始匹配的。
更新:python通過re模組提供對正規表示式的支援。使用re的一般步驟是先使用re.compile()函式,將正規表示式的字串形式編譯為pattern例項,然後使用pattern例項處理文字並獲得匹配結果(乙個match例項),最後使用match例項獲得資訊,進行其他的操作。
在尋找乙個字串中所有的英文本元:
import re
pattern = re.compile('[a-za-z]')
result = pattern.findall('ashdsfdhfvdvshadgweu1324358703475821')
print result
# ['a', 's', 'h', 'd', 's', 'f', 'd', 'h', 'f', 'v', 'd', 'v', 's', 'h', 'a', 'd', 'g', 'w', 'e', 'u']
python 正則re模組
1.正則各種字元表示的含義 預設匹配除 n之外的任意乙個字元,若指定flag dotall,則匹配任意字元,包括換行 匹配字元開頭 匹配 號前的字元0次或多次,re.findall ab cabb3abcbbac 結果為 abb ab a 匹配前乙個字元1次或多次,re.findall ab ab ...
正則re模組
匹配任意乙個字元 以某個字元開頭 以某個字元結尾 匹配0次或多次 匹配一次或多次 匹配0次或1次 匹配n次 匹配n次或多次 匹配n次到m次 字符集,非 a z 匹配小寫字母a到z的任意字母一次 a z 匹配除了小寫字母a到z之外的任意字元一次 d 匹配數字0 9,0次或多次 d匹配任何十進位制數,0...
re正則模組
1.正規表示式的常用符號 預設匹配除 n之外的任意乙個字元,若指定flag dotall,則匹配任意字元,包括換行 匹配字元開頭,若指定flags multiline,這種也可以匹配上 r a nabc neee flags re.multiline 匹配字元結尾,或e.search foo bfo...