正则表达式
(1)模式
^ 匹配字符串开头
$ 匹配字符串结尾
. 匹配除\n外的任意字符
[a-z0-9] 匹配a到z或0-9任意一个字符
[^abc] 不匹配括号里的内容
( )分组
re* 匹配0个或无限次前面的表达式
re+ 匹配1次或无限次前面表达式
re? 匹配0次或者1次前面的表达式
{n, m} 匹配n次到m次前面表达式
{n} 匹配n次前面表达式
{n, } 匹配n次到无限次前面表达式
a | b 匹配a或者b
\w 匹配字母数字下划线,中文
\d 匹配数字,等价于[0-9]
\s 匹配任意空白字符,等价于[\n\t\f\r]
\W 匹配非字母数字下划线或中文,大写字母表示小写字母取反
\1..\9 匹配分组
\10 匹配第n个分组的内容,如果它经匹配。否则指的是八进制字符码的表达式
(2)方法( re.func(pattern,str) 或者 pattern.func(str) )
re.match(pattern,str) 从开头匹配返回group()对象,匹配失败返回None,用group()来显示匹配内容
re.search() 搜索所有的字符串,返回group()对象
re.sub(pattern, repl, str) 其中repl为替换的内容,也就是用pattern匹配str中内容,替换成repl。举例:
str5 = '0813-8102-537 # 这是我家座机'
# 删除后面的注释
print(re.sub(' #.*$', '', str5))
# 删除数字中间-
print(re.sub('\D', '', str5))
结果是:
0813-8102-537
08138102537
再举个经典的例子,
str6 = "13320247938" # 将中间四个数字替换成****
pattern = re.compile('^(1[3578]\d)(\d{4})(\d{4})$')
ss = pattern.sub(r'\1****\3', str6)
print(ss)
结果为
133****7938
re.findall()返回匹配到的所有字符串列表可以, 只返回加了正则模式里面加了括号的部分
str1 = '2005-9-2 上午11:04'
rex = r"(\d{2}):\d{2}" # 只取冒号前面的 '2005-9-2 上午11:04'
it = re.findall(rex, str1)
print(it)
print(re.search(rex,str1).group())
返回结果
['11']
11:04
re.split()按照匹配的字符串进行分割,返回一个列表
下面是一些补充的正则模式