Python正则表达式re库中常见函数的理解和使用
1、re.escape() 的理解和使用
re.escape(_s) 的作用是对字符串 _s 中的所有非字母、数字字符进行转义,以便它们可以在正则表达式中按字面意思进行匹配。
如下是源码

详细解释
在正则表达式中,某些字符(如 .、*、+ 等)具有特殊含义。如果你想在正则表达式中使用这些字符作为普通字符(即匹配它们自身),就需要对它们进行转义。例如,. 在正则表达式中表示匹配任意单个字符,而 \. 表示匹配一个句点。
re.escape(_s) 会对字符串 _s 中的所有非字母、数字字符添加反斜杠 \ 进行转义,以确保这些字符在正则表达式中被解释为普通字符。
示例一
import re s = "a.b*c+" escaped_s = re.escape(s) print(escaped_s)
输出:
a\.b\*c\+
在这个例子中,re.escape(s) 将字符串 a.b*c+ 转义为 a\.b\*c\+,这样在正则表达式中可以按字面意思匹配这些字符。
示例二
import re # 不使用re.escape() pattern = "2+2=4" text = "What is 2+2=4 in math?" print(re.search(pattern, text)) # 输出: None # 使用re.escape() escaped_pattern = re.escape("2+2=4") print(escaped_pattern) # 输出: 2\+2=4 print(re.search(escaped_pattern, text)) # 输出: <re.Match object; span=(8, 13), match='2+2=4'>
在这个例子中,不使用re.escape()时, +被解释为特殊字符,导致匹配失败。使用re.escape()后, +被转义(特殊变普通, 也就有了escape的味道,体会下), 成功匹配了目标字符串。
2、re.sub()函数的理解和使用
概念: re.sub()是Python正则表达式模块re中用于替换字符串的函数。
作用: 它在一个字符串中查找匹配正则表达式的部分,并用新的字符串替换它们。
通俗解释: 想象你有一本书,想要把书中所有的"苹果"替换成"橙子"。re.sub()就像是一个智能的查找替换工具,可以按照你设定的规则(正则表达式)在文本中查找并替换内容。
import re # 基本用法 text = "The cat and the hat sat on the mat." new_text = re.sub(r'at', 'og', text) print(new_text) # 输出: The cog and the hog sog on the mog. # 使用分组 text = "My phone number is 123-456-7890." new_text = re.sub(r'(\d{3})-(\d{3})-(\d{4})', r'(\1) \2-\3', text) print(new_text) # 输出: My phone number is (123) 456-7890. # 使用函数作为替换 def square(match): number = int(match.group()) return str(number ** 2) text = "1 2 3 4 5" new_text = re.sub(r'\d+', square, text) print(new_text) # 输出: 1 4 9 16 25
解释:
- 第一个例子简单地将所有"at"替换为"og"。
- 第二个例子使用分组来重新格式化电话号码。\1, \2, \3 引用了正则表达式中的分组。
- 第三个例子使用函数作为替换。每次匹配到数字时,都会调用square函数来计算其平方。

其中:
- pattern: 要匹配的正则表达式
- repl: 替换的字符串或函数
- string: 要被查找替换的原始字符串
- count: 模式匹配后替换的最大次数,默认0表示替换所有匹配
这个函数在文本处理、数据清洗等任务中非常有用。
3、追问,在2的例子中。字符串前面加上 r是什么意思? .group()又是什么意思?
字符串前面加上 r 的含义:就是为了让类似 \这个字符被视为普通字符(原始字符),而不是转义字符。
r 前缀表示"原始字符串"(raw string)。
概念: 在原始字符串中,反斜杠(\)不会被当作特殊字符对待。
作用: 它使得字符串中的反斜杠被视为普通字符,而不是转义字符。
通俗解释: 想象你在写一个文件路径,比如 "C:\Users\name"。通常 \U 会被解释为一个 Unicode 转义。但如果你用 r"C:\Users\name",它就会按照你看到的样子精确表示。
举例:
print("C:\Users\name") # 会报错或产生意外结果,因为python会默认把\n当成转义字符来处理,所以此处需要在字符串前面加上 r print(r"C:\Users\name") # 便可以正确打印: C:\Users\name,因为加了r后,python就知道了要把\仅当作普通字符来处理。
.group() 方法的含义:简单理解就是 字符串正则表达式匹配后括号里的内容 ( )
概念: .group() 是正则表达式匹配对象(match object)的一个方法。
作用: 它返回匹配的字符串或特定分组匹配的部分。
通俗解释: 当你用正则表达式在文本中找到匹配时,.group() 就像是把找到的内容"圈起来"展示给你。
举例:
import re text = "My phone is 123-456-7890" match = re.search(r"(\d{3})-(\d{3})-(\d{4})", text) if match: print(match.group()) # 打印整个匹配: 123-456-7890 print(match.group(0)) # 同上,打印整个匹配 print(match.group(1)) # 打印第一个括号分组: 123 print(match.group(2)) # 打印第二个括号分组: 456 print(match.group(3)) # 打印第三个括号分组: 7890
在这个例子中:
- group() 或 group(0) 返回整个匹配的字符串。
- group(1)、group(2) 等返回相应的括号分组匹配的内容。
这两个概念在处理正则表达式时非常有用。r 前缀可以让你更容易地写出复杂的正则表达式模式,而 .group() 方法则帮助你提取匹配的具体内容。

浙公网安备 33010602011771号