匹配分组
字符 | 作用 |
---|---|
| | 匹配左右任意一个字符 |
(ab) | 将括号中的字符作为一个分组 |
\num | 引用分组 num 匹配的字符串 |
(?p<name>) | 分组起别名 |
(?P= name) | 引用别名为 name 分组匹配的字符串 |
示例
匹配出 0-100 之间的数字
import re
ret = re.match("[1-9]?\d", "9")
print(ret.group())
ret = re.match("[1-9]?\d", "89")
print(ret.group())
# 错误情况
# ret = re.match("[1-9]?\d", "09")
# print(ret.group())
ret = re.match("[1-9]?\d$", "09")
# print(ret.group())
if ret:
print("匹配正确")
else:
print("不在0-100 之间")
# 添加 |
ret = re.match("[1-9]?\d$|100","8")
print(ret.group())
ret = re.match("[1-9]?\d$|100","78")
print(ret.group())
ret = re.match("[1-9]?\d$|100","100")
print(ret.group())
示例()
import re
ret = re.match("\w{4,20}@163\.com", "yuguo@163.com")
print(ret.group())
ret = re.match("\w{4,20}@(163|qq|139)\.com", "yuguo@139.com")
print(ret.group())
ret = re.match("\w{4,20}@(163|139|qq)/.com", "yuguo@gmail.com")
# print(ret.group())
if ret:
print(ret.group())
else:
print("非 163、139、qq邮箱")
手机号 尾数不是 4 或 7 的手机号码
import re
tels = ["13100001234", "18912344321", "10086", "18800007777"]
for tel in tels:
ret = re.match("1\d{9}[0-35-68-9]", tel)
# print(ret.group())
if ret:
print("%s 尾号不是4和7"% tel)
else:
print("%s 尾号为 4 或 7")
提取区号和电话号码
import re
ret = re.match("([^-]*)-(\d+)","010-12345678")
print(ret.group())
print(ret.group(1))
print(ret.group(2))
示例 \number
匹配出
www.baidu.com
import re
labels = ["<html><h1>www.daibu.com</h1></html>", "<html><h1>www.baidu.com</h2></html>"]
for label in labels:
ret = re.match(r"<(\w*)><(\w*)>.*</\2></\1>", label)
if ret:
print("%s 符合要求" %ret.group())
else:
print("%s 不符合要求" % label)
# 运行结果
<html><h1>www.daibu.cn</h1></html> 符合要求
<html><h1>www.baidu.cn</h2></html> 不符合要求