正则表达式
正则表达式主要用来匹配字符串,例如:判断一个字符串是否是一个合法的网址。思想是用描述性的语言给字符串一个规则。re模块中的match函数提供了这种功能,若匹配成功则返回匹配对象,否则返回None。
(一)语法:
- \d 表示匹配数字; \w 表示匹配字母或数字; .可以匹配任意字符;\s可以匹配一个空格或者tab;特殊字符如-要加\-转义;
eg:’\d\d\d’ 可以匹配’007’
‘\w\d\d’可以匹配’a78’
’00\w’可以匹配’00A’
‘ab.’可以匹配’abc’/‘ab0’/‘ab*’等等
- 匹配变长的字符串时,*:表示任意长字符;+:表示至少一个字符;?:表示0个或1个;{n}表示n个字符;{n,m}表示n-m个字符
eg:’\d{3}\s+\d{3,8}’ 表示3个数字,至少一个空格,3-8个数字 ‘010 12345’
‘\d{3}\-\d{3,8}’
3.[]表示范围
eg:[0-9a-zA-Z\_]表示字母数字下划线
[0-9a-zA-Z\_]+表示至少一个字母数字或下划线
[a-zA-Z\_][0-9a-zA-Z]{0,19}表示字母或下划线开头,1个字符加上19个字符的长度范围
- A|B可以匹配A或者B eg:[p|P]ython可以匹配python或Python
^表示行的开头 eg:^\d表示以数字开头
$表示行的结束 eg:$\d表示以数字结束
(二)re模块
re模块包含所有正则表达式中的功能,注意\的转义功能 eg:>s=‘a\\b’#’a\b’;使用r前缀可以屏蔽转义:s=r’a\b’#’a\b’
判断正则表达式匹配:
>import re>re.match(r’^\d{3}\-\d{3,8}$’,’010-276122’)>#返回match对象;若匹配失败则返回None(啥都木有)
>test=‘whatever’ >if re.match(r’ ‘,test):print(‘ok’) else:print(“fail”)
切分字符串:
>’a b c'.split(‘ ‘)#[‘a’,’b’,’ ‘,’c’]
>re.split(r’[\s\,\;]+’,’a,b;;c d’) #[‘a’,’b’,’c’,’d’]
分组:()
eg:^(\d{3})-(\d{3,8})$定义了两个组
>a=re.match(r’^(\d{3})-(\d{3,8})$’,’010-276122’) #返回match对象
>a.group(0) #’010-276122’ group(0)返回原始字符串
>a.group(1) #’010’ group(1)返回第一个组
>a.group(2) #’276122’ group(2)返回第二个组