python30-正则表达式

python30-正则表达式

在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(原始字符串)中,\ 不会被当作转义符,而是原样保留

  • 写法是在字符串前加 rR

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以外的任意单个字符

【注意】:

转载请说明出处内容投诉
CSS教程网 » python30-正则表达式

发表评论

欢迎 访客 发表评论

一个令你着迷的主题!

查看演示 官网购买