要做更精確的匹配,可以用* [ ] *表示範圍
eg:[0-9a-za-z_]可以匹配乙個數字,字母或者下劃線
[0-9a-za-z_]+可以匹配至少由乙個數字,字母或下劃線組成的字串
python提供re模組,包含所有正規表示式的功能。由於python的字串本身也用\轉義,所以建議使用r字首,這樣就不用考慮轉義的問題。match()方法判斷是否匹配,如果匹配成功,返回乙個match物件,否則返回none。用法如下:
import re
if re.match(r'正規表示式',字串):
print('ok')
else:
print('failed')
用正規表示式切分字串比用固定的字元更靈活,尤其是切分不規則的字串。
eg:
>>>re.split(r'[\s\,]+','a, b, c d')
['a','b','c','d']
正規表示式還有提取子串的功能。用()
表示的就是喲啊提取的分組。
eg:^(\d)-(\d)$
分別定義了兩個組,可以直接從匹配的字串中提取出區號和本地號碼。
>>>m = re.match(r'^(\d)-(\d)$','010-12345')
>>>m
<_sre.sre_match object; span=(0, 9), match='010-12345'>
>>>m.groups()
('010','12345')
>>>m.group(0)
'010-12345'
>>>m.group(1)
'010'
>>>m.group(2)
'12345'
如果正規表示式中定義了組,就可以在match
物件上用group()
方法提取出子串,group(0)
永遠是原始字串,group(1)
,group(2)
…表示第1,2,…個子串。
正則匹配預設是貪婪匹配,也就是匹配盡可能多的字元。
eg:匹配出數字後面的0:
>>>re.match(r'^(\d+)(0*)$','102300').groups()
('102300','')
由於\d+
採用貪婪匹配,直接把後面的0
全部匹配了,結果0*
只能匹配空字串。
必須讓\d+
採用非貪婪匹配(也就是盡可能少匹配),才能把後面的0
匹配出來,加個?
就可以讓\d+
採用非貪婪匹配:
>>>re.match(r'^(\d+?)(0*)$', '102300').groups()
('1023','00')
當我們在python中使用正規表示式,re模組內部會做兩件事:多次使用乙個正規表示式時,可以預編譯:1.編譯正規表示式,如果正規表示式的字串本身不合法,會報錯;
2.用編譯後的正規表示式去匹配字串。
>>>import re
#編譯re_t = re.compile(r'^(\d)-(\d)$')
#使用》re_t.match('010-12345').groups()
('010','12345')
正規表示式隨筆
所謂正規表示式其實就是用一串模版字串去匹配目標字串。1.新增引用using system.text.regularexpressions 如下 textbox txt new textbox txt.textchanged sender,e if regex.ismatch txt.text,150...
正規表示式隨筆
匹配任何單個字元。例如正規表示式 b.g 能匹配如下字串 big bug b g 但是不匹配 buug b.g 可以匹配 buug 匹配括號中的任何乙個字元。例如正規表示式 b aui g 匹配bug big和bag,但是不匹配beg baug。可以在括號中使用連字元 來指定字元的區間來簡化表示,例...
PHP 正規表示式隨筆
正規表示式 正則用來查詢指定的字串 匹配 替換指定的字串 1 什麼是正規表示式 正規表示式是一組描述字串特徵的模式,用於匹配一組字串。這種模式本身也是字串只不過有一些規則和語法。2 正規表示式用來解決字串的搜尋 替換 分隔 3 在php中學習正規表示式學習什麼?正規表示式的寫法。正規表示式的處理函式...