如果直接給出字元,就是精確匹配。用\d可以匹配乙個數字,\w可以匹配乙個字母或數字
s1='00\d'#可以匹配'007',但是匹配不了'00a'
s2='\d\d\d'#可以匹配'010'
s3='\w\w\w'#可以匹配'py3'
s4='\s'#空格
s1='py.'#'pyc','pyo','py2'
符號功能*
任意個字元,包括0個
+至少乙個字元
?0個或者1個字元
n個字元
n-m個字元
#010-12345
s='\d\-\d'#-是特殊字元要加轉義\
表示範圍
字串表示
[0-9a-za-z_]
匹配乙個數字,字母或者下劃線
[0-9a-za-z_]+
至少匹配乙個由數字、字母或者下劃線所組成的字串
[a-za-z_][0-9a-za-z_]*
字母開頭,數字或字母或下劃線構成的字串
alb匹配a或者b
^行的開頭,^/d必須以數字開頭
$行的結束,\d$表示以數字結尾
轉義的問題
s='abc\\-001'#python的字串
#對應的正規表示式字串變成
#'abc\-001'
#不考慮轉義問題
s=r'abc\-001'
# 對應的正規表示式字串不變:
# 'abc\-001'
判斷是否匹配
test = '使用者輸入的字串'
if re.match(r'正規表示式', test):
print('ok')
else:
print('failed')
>>>s='a b c'
>>>re.split(r'\s+',s)
>>>['a','b','c']
>>>s='a,b;; c d'
>>>re.split(r'[\s\,\;]+',s)
>>>['a','b','c']
()代表了分組
^(\d)-(\d)$
>>> m = re.match(r'^(\d)-(\d)$', '010-12345')
>>> m
<_sre.sre_match object; span=(0, 9), match='010-12345'>
>>> m.group(0)
'010-12345'
>>> m.group(1)
'010'
>>> m.group(2)
'12345'
注意到group(0)永遠是原始字串,group(1)、group(2)……表示第1、2、……個子串。
正則匹配預設是貪婪匹配,也就是匹配盡可能多的字元。
>>>re=match(r'^(\d+)(0*)$','102300').groups()
>>>('102300','')
由於\d+採用貪婪匹配,直接把後面的0全部匹配了,結果0*只能匹配空字串了。
必須讓\d+採用非貪婪匹配(也就是盡可能少匹配),才能把後面的0匹配出來。
加個?就可以讓\d+採用非貪婪匹配
>>> re.match(r'^(\d+?)(0*)$', '102300').groups()
('1023', '00')
5re庫的使用
9.match物件的屬性 string 待匹配文字 re 匹配時使用的pattern物件 正規表示式 pos 正規表示式搜尋文字的開始位置 endpos 正規表示式搜尋文字的結束位置 10.match物件的方法 group 0 獲取匹配後的字串 start 匹配字串在原始字串的開始位置 end 匹配...
Python 中re庫的簡單使用
1.findall 方法 返回乙個列表 如下 import re text f open testtext.txt r encoding cp936 for each line in f text text each line f.close result re.findall a z a z a ...
Re庫的用法
python自1.5版本起增加了re模組,它提供了perl風格 perl regular expression 又叫 perl regex 簡稱 pres 的正規表示式模式,re模組使python語言擁有全部的正規表示式功能。compile函式根據乙個模式字串和可選的標誌引數生成乙個正規表示式物件,...