\d 匹配乙個數字
\w 匹配乙個字母或數字
. 匹配任意字元
* 表示任意個字元(包括0個),
+ 表示至少乙個字元
? 表示0個或1個字元
^ 表示行的開頭
$ 表示行的結束
\s 匹配乙個空格(也包括tab等空白符)
\s+ 表示至少有乙個空格
| a|b可以匹配a或b,所以(p|p)ython可以匹配'python'或者'python'。
表示n個字元
表示n-m個字元
- 是特殊字元,在正規表示式中,要用'\'轉義
[a-za-z\_][0-9a-za-z\_]更精確地限制了變數的長度是1-20個字元(前面1個字元+後面最多19個字元)。
s = 'abc\\-001' #python的字串#對應的正規表示式字串變成:#'abc\-001'
使用python的r字首,就不用考慮轉義的問題了:
s = r'abc\-001' #python的字串#對應的正規表示式字串不變:#'abc\-001'
re.match(r'^\d\-\d$', '010-12345')
切分字串
用正規表示式切分字串比用固定的字元更靈活,請看正常的切分**:
>>> 'a b c'.split(' ')
['a', 'b', '', '', 'c']
識別連續的空格,用正規表示式:
>>> re.split(r'\s+', 'a b c')
['a', 'b', 'c']
無論多少個空格都可以正常分割:
>>> re.split(r'[\s\,]+', 'a,b, c d')
['a', 'b', 'c', 'd']
再加入;試試:
>>> re.split(r'[\s\,\;]+', 'a,b;; c d')
['a', 'b', 'c', 'd']
提取子串:
>>> m = re.match(r'^(\d)-(\d)$', '010-12345')>>>m<_sre.sre_match object span="(0," match="010-12345">
>>>m.group(0)'010-12345'
>>> m.group(1)'010'
>>> m.group(2)'12345'
注意到group(0)永遠是原始字串,group(1)、group(2)……表示第1、2、……個子串。
>>> t = '19:05:30'
>>> m = re.match(r'^(0[0-9]|1[0-9]|2[0-3]|[0-9])\:(0[0-9]|1[0-9]|2[0-9]|3[0-9]|4[0-9]|5[0-9]|[0-9])\:(0[0-9]|1[0-9]|2[0-9]|3[0-9]|4[0-9]|5[0-9]|[0-9])$', t)>>>m.groups()
('19', '05', '30')
編譯在python中使用正規表示式時,re模組內部會幹兩件事情:
編譯正規表示式,如果正規表示式的字串本身不合法,會報錯;
用編譯後的正規表示式去匹配字串。
如果乙個正規表示式要重複使用幾千次,出於效率的考慮,我們可以預編譯該正規表示式,接下來重複使用時就不需要編譯這個步驟了,直接匹配:
>>> importre#編譯:
>>> re_telephone = re.compile(r'^(\d)-(\d)$')#使用:
>>> re_telephone.match('010-12345').groups()
('010', '12345')>>> re_telephone.match('010-8086').groups()
('010', '8086')
Erlang 正則過濾空格 包括全形空格
之前在驗證玩家起名字的時候,首先先去掉字串首尾空格,寫了乙個簡單的trim string trim string str when is binary str trim string str,binary trim string str when is list str trim string st...
正則規範空格問題
需求 規範段落中的空格,英文與中文間,英文與數字間,漢字與漢字,數字與數字,英文與英文間的空格不做處理。例如 enligsh 中文 123中文,abc234 要實現 english 中文123中文,abc 234 解決方案 public string matchkg string source s ...
php 正則去掉 空格 與
1 php 正則去掉 空格 str factory supply high quality maitake mushroom extract powder bulk product name uuu preg replace s xc2 xa0 str echo str replace uuu 2 ...