欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

python 正则

程序员文章站 2022-07-13 13:14:42
...

匹配单个字符

字符 功能
. 匹配任意字符(除了\n)
[ ] 匹配[ ]中列举的任意字符
\d 匹配数字,即0-9
\D 匹配非数字
\s 匹配空白,即空格 TAB
\S 匹配非数字
\w 匹配单词字符,即a-zA-Z0-9_
\W 匹配非单词字符
import re
result = re.match(r".","hello")
print(result.group())

匹配多个字符

字符 功能
* 匹配前一个字符出现0次或者无限次
+ 匹配前一个字符出现1次或者无限次
? 匹配前一个字符出现0次或者1次
{m} 匹配前一个字符出现m次
{m,n} 匹配前一个字符出现m到n次
import re
# * 匹配前一个字符出现0次或者无数次
result = re.match(r"\d*","123")
print(result.group())
# + 匹配前一个字符至少出现一次
result = re.match(r"\d+","123")
print(result.group())
# {m} 匹配前一个字符出现m次
result = re.match(r"\d{11}","18652664142")
print(result.group())
# {m,n} 匹配前一个字符出现m到n次
result = re.match(r"\d{3,4}-\d{7,8}","021-87295866")
print(result.group())

头和尾

result = re.match(r"\d+-[a-zA-Z]+","123-hello123")
print(result) # <re.Match object; span=(0, 9), match='123-hello'>
result = re.match(r"^\d+-[a-zA-Z]+$","123-hello123")
print(result) # None

转义

在需要转义的字符前加\即可

result = re.match("\d+\.\d*","2.0")
print(result.group())

分组

字符 功能
| 匹配左右任意一个表达式
(ab) 将括号中字符作为一个分组
\num 引用分组num匹配到的字符串
(?P<name>) 分组起别名
(?P=name) 引用别名为name匹配到的字符串
# 分组
html_content = "<body><h1>张三</h1></body>"
result = re.match(r"<(\w*)><(\w*)>.*</(\2)></(\1)>",html_content)
print(result.group(0),result.group(1),result.group(2))
# 分组别名
result = re.match(r"<(?P<p1>\w*)><(?P<p2>\w*)>.*</(?P=p2)></(?P=p1)>",html_content)
print(result.group(1),result.group(2))

扩展用法

# search
result = re.search(r"\d+","阅读数量 9999")
print(result.group())
# findall
result = re.findall(r"\d+","语文100 数学50 英语10")
print(result)
# sub
result = re.sub(r"\d+","{未知}","语文100 数学50 英语10")
print(result)
# split
result = re.split(r":|\s+","姓名:张三  年龄:9")
print(result)
相关标签: 正则