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)
上一篇: 正则表达式
下一篇: 正则表达式学习使用笔记整理