您的位置:首页 > 其它

正则表达式整理

2018-02-20 22:38 218 查看
/d:匹配一个数字,data
/w:匹配一个数字或一个单词,word
/s:匹配一个空格(包含tab),space
/W:匹配所有非单词和下划线
*表示任意个,+表示至少一个,?表示0个或一个,{n}表示n个,{m,n}表示m~n个。为了使正则表达式匹配的范围自定义,可以使用[],将想要匹配的所有符号写在[]中,比如[0-9a-zA-Z\_]匹配一个数字或字母或者下划线。关于正则表达式中的两次转义,一次转义是转为特殊符号,一次转义是转义为字符串,当加上r之后,已经默认转为字符串,因此只需要一次转义。使用正则表达式的妙处:1.可以检查输入字符串是否正确--检测匹配问题
if re.match(r'正则表达式', test):
print('ok')
test是输入的字符串。
2.利用正则表达式的split方法来划分字符串,划分标准可以使用正则表达式指定。
re.split(r'\s+', 'a b   c')    ---- ['a', 'b', 'c']
3.从字符串中提取分组groups,用括号()表示分组
m = re.match(r'^(\d{3})-(\d{3,8})$', '010-12345')
>>> m.group(0)
'010-12345'
>>> m.group(1)
'010'
>>> m.group(2)
'12345'

注意:1.关于贪婪匹配,加个?就可以实现非贪婪匹配;2.如果一个正则表达式要重复使用几千次,出于效率的考虑,我们可以预编译该正则表达式,使用compile先编译正则表达式。re.match()与re.search()的区别:re.match()总是从字符串的开头开始匹配,而re.seach()函数将对整个字符串进行搜索,并返回第一个匹配的字符串的match对象。例如:In:print(re.match(r'([A-Za-z]+)\.','Hello,world.' ))
Out:NoneIn:print(re.search(r'([A-Za-z]+)\.','Hello,world.' ))Out:<_sre.SRE_Match object; span=(6, 12), match='world.'>3.正则表达式中的圆括号()和大方框[]的区别:大方框[]是组成了一个匹配范围,可以在这个范围后面加上?表示范围内选择0个或1个字符,+表示匹配[]当中至少一个字符等等,例如[\+\-]?可以匹配‘+’和‘-’和‘ ’;圆括号()是一个分组,这个分组中的正则表达式是一个统一的整体,可以表示出这个组的构成,比如(\+\-)?可以匹配‘+-’和‘ ’。一般这两种可以搭配使用。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: