Python 正则表达式规则

sukha 4 min read
Table of Contents

Python 正则表达式规则整理

1. 基础匹配符

符号 含义 示例


. 匹配任意字符(默认不包含换行) a.c 匹配 abc \d 数字 123 \D 非数字 abc \w 字母、数字、下划线 user_1 \W 非字母数字下划线 @#$ \s 空白字符(空格、Tab、换行)
\S 非空白字符


2. 数量控制符

*

匹配 0 次或多次。

regex
a*

匹配:

""
"a"
"aaa"

+

匹配 1 次或多次。

regex
a+

匹配:

a
aaa

?

匹配 0 次或 1 次。

regex
colou?r

匹配:

color
colour

{n}

固定次数:

regex
\d{4}

匹配:

2026

{n,m}

范围次数:

regex
\d{2,4}

匹配:

12
123
1234

3. 贪婪匹配和非贪婪匹配

贪婪匹配

默认情况下,正则会尽可能多匹配。

regex
<a>.*</a>

文本:

<a>hello</a><a>world</a>

结果:

<a>hello</a><a>world</a>

非贪婪匹配

在数量符后添加 ?:

regex
<a>.*?</a>

结果:

<a>hello</a>

常见转换:

贪婪 非贪婪


* *? + +? ? ?? {n,m} {n,m}?


4. 分组

捕获组

使用:

regex
(...)

作用:

提取需要使用的数据。

示例:

regex
hello (world)

Python:

python
m.group(1)

结果:

world

非捕获组

使用:

regex
(?:...)

作用:

只进行逻辑分组,不保存结果。

示例:

regex
(?:cat|dog)

5. 选择

使用:

regex
|

示例:

regex
cat|dog

匹配:

cat
dog

6. 字符集合

匹配其中一个字符

regex
[abc]

匹配:

a
b
c

范围

regex
[a-z]
[A-Z]
[0-9]

排除

regex
[^0-9]

表示:

不是数字。


7. 边界

开始

regex
^

例如:

regex
^Hello

匹配:

Hello world

结束

regex
$

例如:

regex
world$

匹配:

hello world

8. Lookaround(约束条件)

特点:

检查条件,但不会消耗匹配字符。

正向先行

regex
(?=xxx)

后面必须是 xxx。

例:

regex
hello(?= world)

匹配:

hello

要求后面存在:

world

负向先行

regex
(?!xxx)

后面不能是 xxx。


正向后行

regex
(?<=xxx)

前面必须是 xxx。


负向后行

regex
(?<!xxx)

前面不能是 xxx。


9. Python re 常用参数

DOTALL

python
re.DOTALL

作用:

让 . 可以匹配换行。


IGNORECASE

python
re.I

忽略大小写。


MULTILINE

python
re.M

让 ^ 和 $ 匹配每一行。


10. Agent ReAct 输出解析案例

Thought 提取

python
r"Thought:\s*(.*?)(?=\nAction:|$)"

解析:

Thought:

固定标识。

\s*

跳过空白。

(.*?)

捕获 Thought 内容。

(?=\nAction:|$)

约束结束位置:

  • 遇到 Action
  • 或文本结束

Action 提取

python
r"Action:\s*(.*?)$"

解析:

Action:

固定标识。

\s*

忽略空白。

(.*?)

捕获 Action 内容。

$

直到文本结束。


11. 阅读复杂正则的方法

推荐顺序:

  1. 找捕获组 (...)
    • 我要提取什么?
  2. 找边界:
    • ^
    • $
    • (?=)
    • (?<=)
  3. 找数量:
    • *
    • +
    • ?
    • {}
  4. 找特殊字符:
    • \s
    • \d
    • \w
    • .

12. 工程建议

简单固定格式:

优先:

python
split()
index()
find()

复杂文本解析:

使用:

python
re

LLM 输出解析:

正则通常足够,因为文本规模小,瓶颈一般在模型推理。


核心记忆

最常用:

()
(?:)
.*
.*?
\s*
^
$
(?=)
(?<=)
re.DOTALL

掌握这些,基本可以处理大部分工程正则场景。

后记

My avatar

感谢你读到这里。

这座小站更像一份持续维护的“终端笔记”:记录我解决问题的过程,也记录走过的弯路。


More Posts

评论

评论 (0)

请先登录后再发表评论

加载中...