工作学习中常用的正则表达式总结。正则表达式是一种特殊的字符序列,能帮助检查字符串是否与某种模式相匹配。
正则基础元字符
关于正则表达式的基础语法和字符释义讲解。不懂的时候翻阅一下即可,无需死记硬背。
常用元字符
元字符有 . \ [ ] ( ) ^ $ | \\ ? * + { } 共 11 种。
Python 正则表达式涵盖基础元字符、量化符及常用模块参数。详细解析 re.compile、search、match、findall 等核心函数的用法与区别,并提供结合 Pandas 进行数据清洗的实际代码示例。同时推荐了正则表达式可视化工具辅助学习。

工作学习中常用的正则表达式总结。正则表达式是一种特殊的字符序列,能帮助检查字符串是否与某种模式相匹配。
关于正则表达式的基础语法和字符释义讲解。不懂的时候翻阅一下即可,无需死记硬背。
元字符有 . \ [ ] ( ) ^ $ | \\ ? * + { } 共 11 种。
量化符也叫重复修饰符,将紧挨着量化符前面的那个字符,匹配 0 次、1 次或者多次。
在 *?, +?, ?? 中,*, + 和 ? 修饰符都是贪婪的,在字符串进行尽可能多的匹配。在修饰符之后添加 ? 将使样式以非贪婪方式或者最小方式进行匹配;尽量少的字符将会被匹配。
re.A:只匹配 ASCII 字符re.I:忽略大小写re.L:语言依赖re.M:多行模式re.X:冗长模式re.S:点 dot 匹配全部字符re.U:Unicode 匹配[] 字符集合
字符可以单独列出,比如 [amk] 匹配 'a'、'm' 或者 'k'。
将正则表达式的样式编译为一个正则表达式对象(正则对象),通过这个对象的方法 match、search() 等做匹配。这个表达式的行为可以通过指定标记的值来改变。值可以是任意变量,可以通过位的 OR 操作(| 操作符)来结合。
prog = re.compile(pattern)
如果需要多次使用这个正则表达式的话,使用 re.compile() 并保存这个正则对象以便复用,可以让程序更加高效。通过 re.compile() 编译后的样式和模块级的函数会被缓存,所以少数的正则表达式使用无需考虑编译的问题。
扫描整个字符串找到匹配样式的第一个位置,并返回一个相应的匹配对象。如果没有匹配,就返回一个 None。这和找到一个零长度匹配是不同的。
# \w 用来匹配单个字符,包括 a-z A-Z 0-9 _
如果 string 开始的 0 或多个字符匹配到了正则表达式样式,就返回一个相应的匹配对象。如果没有匹配,就返回 None;注意它跟零长度匹配是不同的。即便是 MULTILINE 多行模式,re.match() 也只匹配字符串的开始位置,而不匹配每行开始。如果你想定位 string 的任何位置,使用 search() 来替代。
# \w 用来匹配单个字符,包括 a-z A-Z 0-9 _
如果整个 string 匹配到正则表达式样式,就返回一个相应的匹配对象。否则就返回一个 None;注意这跟零长度匹配是不同的。
用 pattern 分开 string。如果在 pattern 中捕获到括号,那么所有的组里的文字也会包含在列表里。如果 maxsplit 非零,最多进行 maxsplit 次分隔,剩下的字符全部返回到列表的最后一个元素。
# 按照';'或者','对字符串进行分割
如果分隔符里有捕获组合,并且匹配到字符串的开始,那么结果将会以一个空字符串开始。对于结尾也是一样:
>>> re.split(r'(\W+)', '...words, words...')
返回 pattern 在 string 中的所有非重叠匹配,以字符串列表或字符串元组列表的形式。对 string 的扫描从左至右,匹配结果按照找到的顺序返回。空匹配也包括在结果中。返回结果取决于模式中捕获组的数量。
# 匹配包含所有带有 o 的单词
在 string 里所有的非重复匹配,返回为一个迭代器 iterator 保存了匹配对象。string 从左到右扫描,匹配按顺序排列。空匹配也包含在结果里。
返回通过使用 repl 替换在 string 最左边非重叠出现的 pattern 而获得的字符串。如果样式没有找到,则不加改变地返回 string。
repl 可以是字符串或函数;如为字符串,则其中任何反斜杠转义序列都会被处理。如果 repl 是一个函数,那它会对每个非重复的 pattern 的情况调用。这个函数只能有一个匹配对象参数,并返回一个替换后的字符串。
可选参数 count 是要替换的最大次数;count 必须是非负整数。如果省略这个参数或设为 0,所有的匹配都会被替换。
def dashrepl(matchobj):
...
转义 pattern 中的特殊字符。如果你想对任意可能包含正则表达式元字符的文本字符串进行匹配,它就是有用的。
>>> print(re.escape('https://www.python.org'))
工作中我们常常使用 pandas 读取和操作数据,那么如何结合正则表达式去处理数据呢?
# 取出 #后的内容,并去除井号
结合 re.sub 函数可以做数据清洗,替换掉文本中不要的字符。
df['sentence'] = df['sentence'].astype('str').apply(lambda x: re.sub('[0-9+,,.。…、''^_?::''""()();;【】!!*?]+', '', x))
推荐几个可视化的正则表达式学习工具。

微信公众号「极客日志」,在微信中扫描左侧二维码关注。展示文案:极客日志 zeeklog
解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online
将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online
将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online
将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online
将 HTML 片段转为 GitHub Flavored Markdown,支持标题、列表、链接、代码块与表格等;浏览器内处理,可链接预填。 在线工具,HTML转Markdown在线工具,online
通过删除不必要的空白来缩小和压缩JSON。 在线工具,JSON 压缩在线工具,online