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

解释:

  1. 第一个例子简单地将所有"at"替换为"og"。
  2. 第二个例子使用分组来重新格式化电话号码。\1, \2, \3 引用了正则表达式中的分组。
  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() 方法则帮助你提取匹配的具体内容。

 

posted @ 2024-07-05 17:36  AlphaGeek  阅读(166)  评论(0)    收藏  举报