Python - re 模块
正则语法:https://www.runoob.com/regexp/regexp-syntax.html
入门案例
"""
# 用法一:
re.match(pattern, string)
pattern: 正则表达式
string: 要进行匹配的字符串
如果匹配成功返回Match Object
否则返回None
# 用法二,创建Pattern 对象
pattern = re.compile('正则表达式')
pattern.findall(): 返回匹配到的字符串
pattern.search(): 返回Match对象
pattern.findter(): 返回一个可迭代对象
"""
import re
# \w => 匹配字母、数字、下划线。等价于 [A-Za-z0-9_]
match_obj = re.match('\w{4,20}@163\.com$', 'hello@163.com')
if match_obj:
print(match_obj.group())
else:
print('匹配失败')
分组匹配之 ()
"""
正则表达式中的() 代表分组匹配
match.groups(1): 获得第一个括号(分组)中匹配到的内容
match.groups(2): 获得第二个括号(分组)中匹配到的内容
match.groups():等价于(m.group(1), m.group(2), ...)
"""
import re
mathch = re.match('(\d{3,4})-(\d{7,8})', '010-12345678')
print(mathch.group()) # 010-12345678
print(mathch.group(1)) # 010
print(mathch.group(2)) # 12345678
分组配置之引用
"""
分组匹配之引用: \
"""
import re
# \1 的作用:引用第一个括号中的正则表达式
# \2 的作用:引用第二个括号中的正则表达式
m = re.match(r'<([A-Za-z0-9]+)><([A-Za-z0-9]+)>.*</\2></\1>', '<html><a>test</a></html>')
print(m.group())
分组匹配起别名 和 用别名
"""
分组匹配之
1.起别名:(?P<name1>)
2.用别名:(?P=name1)
"""
import re
m = re.match(r'<(?P<name1>[A-Za-z0-9]+)><(?P<name2>[A-Za-z0-9]+)>.*</(?P=name2)></(?P=name1)>', '<html><a>test</a></html><body>')
print(m.group()) # out: <html><a>test</a></html>
高级使用
search
"""
search(pattern, str): 搜索匹配,开头匹配不到会搜索整个字符串, 返回 Match 对象
match(pattern, str): 从字符串开头就开始匹配,如果开头匹配不到,就返回None
"""
import re
m = re.search('\d+' , '销量:1000')
# m = re.match('\d+' , '销量:1000') # 匹配失败,因为字符串开头不是数字开头
if m:
print(m.group())
else:
print('匹配失败')
fandall
"""
re.findall(pattern, str) -> list
返回匹配到的所有值
"""
import re
re_list = re.findall('\d+' , '销量:1000,评论数:2000,浏览量:3000')
if re_list:
print(re_list) # ['1000', '2000', '3000']
else:
print('匹配失败')
sub
"""
sub(pattern, repl, string):
将所有匹配到的内容替换为repl,返回结果是一个str
"""
import re
ret_str = re.sub('\d+' , '999', '销量:1000,评论数:2000,浏览量:3000') #out:销量:999,评论数:999,浏览量:999
if ret_str:
print(ret_str)
else:
print('匹配失败')
finditer
p = re.compile(r'\d') # 匹配一个数字
for match in p.finditer("sdfad-12312-31"):
print(match.group()) # 获取匹配内容
print(match.start()) # 获取匹配内容在原字符串中的开始位置
print(match.end()) # 获取匹配内容在原字符串中的结束位置
print(match.span()) # 以二元组的形式返回匹配内容在原字符串中的开始和结束的位置
#out:
"""
1
6
7
(6, 7)
2
7
8
(7, 8)
3
8
9
(8, 9)
1
9
10
(9, 10)
2
10
11
(10, 11)
3
12
13
(12, 13)
1
13
14
(13, 14)
"""
本文来自博客园,作者:chuangzhou,转载请注明原文链接:https://www.cnblogs.com/czzz/p/15795740.html