在Python中需要通过正则表达式对字符串进⾏匹配的时候,可以使⽤⼀个python自带的模块,名字为re。
re模块的使用:import re
一、匹配函数
1-1、re.match函数:返回匹配对象
match函数实现的是精准匹配,尝试从字符串的开头匹配模式,如果匹配成功,则返回一个匹配对象,否则返回None。
语法:
re.match(pattern, string)
-
只在 字符串开头 尝试匹配
-
如果开头不匹配,就直接返回
None
示例:
1-2、re.search函数:返回匹配对象
search()可以在整个字符中查找第一个匹配项,而不仅仅是从开头!返回第一个匹配到的结果!
语法:
re.search(pattern, string)
-
从 整个字符串 中找 第一个匹配
-
找到就返回
Match对象,没有就None
示例:
【小结】:re.match()函数 VS re.search()函数
re.match()和re.search()都是 只找第一个匹配,一旦找到就停止,不会继续往下找。如果你想要 所有匹配,就得用
re.findall()(直接得到 list)
re.finditer()(得到迭代器,能看位置等更多信息)
| 方法 | 从哪里开始找 | 找到一个后 | 常见用途 |
|---|---|---|---|
re.match() |
从字符串 开头 开始匹配 | 停止,不再继续 | 检查开头是否符合格式(如校验手机号、日期) |
re.search() |
从字符串 任意位置 开始找 | 停止,不再继续 | 找字符串中 第一次 出现的匹配 |
1-3、re.findall函数:直接返回 列表(list)
语法:
re.findall(pattern, string)
-
找到 所有非重叠匹配的列表,直接返回 列表(
list) -
如果 pattern 中有分组,只返回分组匹配的内容
示例:
1-4、re.finditer函数:返回一个 迭代器
语法:
re.finditer(pattern, string)
-
找到所有匹配,但返回的是一个 迭代器(每个元素是
Match对象) -
更适合需要匹配位置或懒加载的场景
若是你想遍历所有的匹配项,并且希望得到每个匹配项更多的信息(如:位置),可以使用re.finditer函数。
二、raw-string 格式(原始字符串)
1. 什么是 raw-string
-
Python 普通字符串中,
\是 转义符-
"\n"代表换行 -
"\t"代表制表符
-
-
在 raw-string(原始字符串)中,
\不会被当作转义符,而是原样保留 -
写法是在字符串前加
r或R:
s1 = "a\nb"
s2 = r"a\nb"
print(s1) # a 换行 b
print(s2) # a\nb
2. 为什么正则特别需要 raw-string
正则表达式里 反斜杠 \ 本身就是语法的一部分(比如 \d, \w, \s 等),
如果不用 raw-string,就得写双反斜杠来避免 Python 把它当作转义符。
例子:
import re
# 不用 raw-string
pattern1 = "\\d+" # Python 字符串先转义成 \d
print(re.findall(pattern1, "a123b")) # ['123']
# 用 raw-string
pattern2 = r"\d+" # \d 原样传给正则引擎
print(re.findall(pattern2, "a123b")) # ['123']
结果是一样的,但 raw-string 更直观,省得到处写 \\。
3. 什么时候不能用 raw-string
-
raw-string 里最后一个字符不能是单个反斜杠:
r"abc\" # ❌ 会报错
因为 Python 语法本身需要 \ 转义引号,raw-string 也要遵守。
4. 总结
| 写法 | Python 看到的内容 | 适合场景 |
|---|---|---|
"\\d+" |
\d+ |
正则,但写法麻烦 |
r"\d+" |
\d+ |
正则推荐写法 |
【小结】:
不加r,\\ = \
建议你记成一句话:“写正则时,前面加个 r,少写反斜杠,多活十年。”
三、常用正则表达式常见的符号
3-1、匹配单个字符
| 字符 | 功能 | |
| . | 匹配除换行符\n以外的任意单个字符。 | |
| [ ] | 匹配[ ]中列举的字符 |
[abc]: 匹配 a 或 b 或 c 中的一个字符
|
| [^ ] | 匹配不是[ ]中列举的字符 | [^abc]:匹配 不是 a/b/c 的一个字符 |
| \d | 匹配数字 | 等价于:[0-9] |
| \D | 匹配非数字 | 等价于:[^0-9] |
| \s | 匹配空白符(空格、制表符\t、换行\n,换页\f、回车\r 等) | 等价于:[ \t\n\r\f\v] |
| \S | 匹配非空白字符 | [^ \t\n\r\f\v] |
| \w | 匹配单词字符(字母、数字、下划线) | [a-zA-Z0-9_] |
| \W | 匹配非单词字符 | [^a-zA-Z0-9_] |
记忆技巧
d→ digit(数字)
s→ space(空格)
w→ word(单词字符)大写版本(
\D \S \W)就是取反
1、.(点号)
匹配除换行符\n以外的任意单个字符。
【注意】: