python-正则表达式总结

1、re模块操作
# 导入 re模块
import re
# 使用match 方法进行匹配操作
result = re.match(正则表达式,要匹配的字符串)
# 如果上一步匹配到数据的话,可以使用group 方法来提取数据
result.group()
2、匹配单个字符
. 匹配任意1个字符(除了\n)
[] 匹配[]中列举的字符
\d 匹配数字,即0-9
\D 匹配非数字,既不是数字
\s 匹配空白,即空格 tab键 \t
\S 匹配非空白
\w 匹配单词字符,即a-z、A-Z、0-9、_
\W 匹配非单词字符
3、匹配多个字符
* 匹配前一个字符出现0次或者无限次,即可有可无
+ 匹配前一个字符出现1次或者无限次,即至少出现一次
? 匹配前一个字符出现1次或者0次,即要么有1次,要么没有
{m}匹配前一个字符出现m次
{m,n}匹配前一个字符出现m到n次
4、匹配开头结尾
^ 匹配字符串开头
$ 匹配字符串结尾
5、匹配分组
| 匹配左右任意一个表达式
() 将括号中字符作为一个分组 # 第一个()为1,一次类推
\num 引用分组num匹配到的字符串
(?P<name>)分组起别名
(?P=name) 引用别名为name分组匹配到的字符串
例如:
print(re.match(r'<(\w*)><(\w*)>.*</(\2)></(\1)>',
'<body><h1>asdfasdasd</h1></body>'))
print(re.match(r'<(?P<p1>\w*)><(?P<p2>\w*)>.*</(?P=p2)></(?P=p1)>',
'<body><h1>asdfasdasd</h1></body>'))
6、re模块的高级用法
search:并不是开头开匹配, 找到之后后面不会再找了
findall:直接返回所有查找到的结果,而且不用group
sub: 将查询到字符串进行替换,符合要求将第三个字符串内容替换为第二个字符串(第二个字符串也可以为函数)
split: 根据匹配进行切割字符串,并返回一个列表
例如
print(re.search(r'\d+', 'sdf1324adsf345').group())
print(re.sub(r'\d+', '1324', 'ccc123---'))
import re
def add(temp):
strNum = temp.group()
num = int(strNum) + 1
return str(num)
ret = re.sub(r'\d+', add, 'python = 3')
print(ret)
print(re.split(':| ', '信息:小张 33 山东'))
posted @ 2019-10-29 11:19  fuyouqiang  阅读(329)  评论(1编辑  收藏  举报