正则表达式模式与字符类
\d、\w、\s、.、^、$、+、*、?、{n,m}、字符类 [a-z] 和否定 [^...]
正则表达式模式与字符类 是 CoddyKit 上的免费 Learn AI with Python 课时。 这是第 1 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Learn AI with Python 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Learn AI with Python 课程共包含 4 节课。
为什么正则表达式对文本人工智能很重要
文本人工智能始于杂乱的原始文本。正则表达式(regex)是一种用于查找和提取模式的简洁语言,可处理电话号码、日期、主题标签和网址,帮助您在将文本输入模型前进行清理和结构化。
本课程将讲解模式、re 模块、分组,以及真实的文本清理流程。
字面字符
最简单的模式就是字面文本:它会精确匹配这些字符。正则表达式默认区分大小写。
cat 可以匹配 "the cat sat" 中的 "cat",但不能匹配 "Cat"。
import re
print(re.findall("cat", "the cat sat on a cat mat"))
# ["cat", "cat"]点元字符
点号 . 会匹配除换行符之外的任意单个字符。它是一个通配符。
c.t 可以匹配 "cat"、"cot"、"c9t",也就是包含 c、任意一个字符和 t 的任意内容。
import re
print(re.findall("c.t", "cat cot cut c@t"))
# ["cat", "cot", "cut", "c@t"]数字、单词和空白字符类
简写的字符类可以覆盖常见的字符组:
\d— 一个数字(0-9)\w— 一个单词字符(字母、数字或下划线)\s— 空白字符(空格、制表符或换行符)
import re
print(re.findall("\d", "a1b2c3")) # ["1", "2", "3"]
print(re.findall("\w", "a_1!")) # ["a", "_", "1"]
print(re.findall("\s", "a b\tc")) # [" ", "\t"]否定字符类
大写形式会对字符类取反:
\D— 任何不是数字的字符\W— 任何不是单词字符的字符\S— 任何不是空白字符的字符
import re
print(re.findall("\D", "a1b2")) # ["a", "b"]
print(re.findall("\S", "a b c")) # ["a", "b", "c"]使用 [ ] 自定义字符集
方括号可以定义您自己的字符集:匹配其中列出的任意一个字符。范围使用连字符表示。
[aeiou]— 任意一个元音字母[A-Za-z]— 任意一个字母[0-9]— 任意一个数字(与\d相同)
import re
print(re.findall("[A-Za-z]", "ab12CD")) # letters only
print(re.findall("[aeiou]", "hello")) # ["e", "o"]使用 [^ ] 否定字符集
在方括号内部使用脱字符号可以对字符集取反:匹配未列出的任意字符。
[^abc] 可以匹配除 a、b、c 之外的任何内容。(方括号外部的脱字符号是一个锚点,将在下一节介绍。)
import re
print(re.findall("[^aeiou ]", "hello world"))
# consonants: ["h", "l", "l", "w", "r", "l", "d"]锚点:^ 和 $
锚点匹配的是位置,而不是字符:
^— 字符串(或行)的开头$— 字符串(或行)的结尾
只有当文本以 "Hello" 开头时,^Hello 才会匹配。
import re
print(bool(re.search("^Hello", "Hello world"))) # True
print(bool(re.search("world$", "Hello world"))) # True
print(bool(re.search("^world", "Hello world"))) # False量词:+ * ?
量词表示前一个项目重复的次数:
+— 一次或多次*— 零次或多次?— 零次或一次(可选)
import re
print(re.findall("\d+", "abc 123 de 45")) # ["123", "45"]
print(re.findall("ab*", "a ab abb")) # ["a", "ab", "abb"]
print(re.findall("colou?r", "color colour")) # both match范围量词 {n,m}
花括号可以表示确切次数或次数范围:
{3}— 恰好 3 次{2,4}— 2 到 4 次{2,}— 2 次或更多
这对于 ZIP 代码或电话号码片段等固定长度的项目非常有用。
import re
print(re.findall("\d{3}", "12 345 6789")) # ["345", "678"]
print(re.findall("\d{2,4}", "1 22 3333 55555"))组合各个部分
真实的模式会组合字符类、字符集、锚点和量词。下面的模式可以匹配类似 555-123-4567 的简单 US 电话号码:
\d{3}-\d{3}-\d{4} — 三位数字、连字符、三位数字、连字符、四位数字。
import re
text = "Call 555-123-4567 or 999-888-7777"
print(re.findall("\d{3}-\d{3}-\d{4}", text))
# ["555-123-4567", "999-888-7777"]快速检查:量词
您希望匹配连续出现的一位或多位数字。
回顾:模式和字符类
现在您已经掌握了正则表达式的基本构件:
- 字面字符和
.通配符 - 字符类
\d \w \s及其否定形式\D \W \S - 自定义字符集
[A-Za-z]和否定字符集[^abc] - 锚点
^和$ - 量词
+ * ?以及范围量词{n,m}
下一步:Python re 模块的函数。
常见问题解答
「正则表达式模式与字符类」课时是免费的吗?
是的 — 「正则表达式模式与字符类」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Learn AI with Python 课程的其余内容,请升级到 CoddyKit PRO。 Learn AI with Python 课程共包含 4 节课。
「正则表达式模式与字符类」这节课中我会学到什么?
\d、\w、\s、.、^、$、+、*、?、{n,m}、字符类 [a-z] 和否定 [^...] 你通过在浏览器中直接运行的动手代码来练习 Learn AI with Python,全天候 AI 导师会在你学习这节课的过程中回答你的问题。
学习 Learn AI with Python 需要有经验吗?
无需任何先前经验。CoddyKit 上的 Learn AI with Python 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 1 节课,共 4 节。
「正则表达式模式与字符类」课时需要多长时间?
大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。
我能在这节 Learn AI with Python 课中编写并运行代码吗?
能。每节 Learn AI with Python 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。