re模块常用方法有哪些?

访客 python案例 2

本文目录导读:

  1. 核心搜索与匹配方法
  2. 字符串替换方法
  3. 字符串分割方法
  4. 编译与性能优化方法
  5. 常用标志(flags
  6. 综合示例

Python 的 re 模块(正则表达式)提供了多种强大的方法用于字符串的模式匹配、搜索、替换和分割,以下是其中最常用的方法,按功能分类说明:

核心搜索与匹配方法

  • re.match(pattern, string, flags=0)

    • 作用:从字符串的 起始位置 开始匹配模式,如果起始位置匹配成功,返回一个 Match 对象;否则返回 None
    • 注意:它只检查字符串开头,不检查整个字符串。
    • 示例
      import re
      result = re.match(r'\d+', '123abc')
      print(result.group())  # 输出: 123
  • re.search(pattern, string, flags=0)

    • 作用:扫描 整个字符串,找到第一个匹配模式的位置,返回第一个 Match 对象,找不到返回 None
    • 示例
      result = re.search(r'\d+', 'abc123def456')
      print(result.group())  # 输出: 123 (第一个数字)
  • re.findall(pattern, string, flags=0)

    • 作用:找到字符串中所有符合模式的子串,以 列表 形式返回,如果没有匹配则返回空列表。
    • 示例
      result = re.findall(r'\d+', 'abc123def456')
      print(result)  # 输出: ['123', '456']
  • re.finditer(pattern, string, flags=0)

    • 作用:与 findall 类似,但返回一个包含所有匹配结果的 迭代器(每个元素是一个 Match 对象),适合处理大量匹配时节省内存。
    • 示例
      for match in re.finditer(r'\d+', 'a1b2c3'):
          print(match.group())  # 依次输出: 1, 2, 3

字符串替换方法

  • re.sub(pattern, repl, string, count=0, flags=0)

    • 作用:将字符串中所有匹配 pattern 的子串替换为 replcount 指定最多替换次数,默认为 0(全部替换)。

    • repl 可以是字符串或函数:函数接收 Match 对象作为参数,返回替换字符串。

    • 示例

      # 基本替换
      text = "hello 123 world 456"
      result = re.sub(r'\d+', 'NUMBER', text)
      print(result)  # 输出: hello NUMBER world NUMBER
      # 使用函数动态替换
      def replace_func(match):
          return str(int(match.group()) * 2)
      result = re.sub(r'\d+', replace_func, text)
      print(result)  # 输出: hello 246 world 912
  • re.subn(pattern, repl, string, count=0, flags=0)

    • 作用:与 sub 功能完全相同,但返回一个 元组 (新字符串, 替换次数)
    • 示例
      result, count = re.subn(r'\d+', 'NUM', 'a1b2c3')
      print(result)  # 输出: aNUMbNUMcNUM
      print(count)   # 输出: 3

字符串分割方法

  • re.split(pattern, string, maxsplit=0, flags=0)

    • 作用:按照匹配 pattern 的子串来分割字符串,返回一个 列表maxsplit 指定最大分割次数,0 表示不限制。

    • 示例

      text = "apple, orange; banana | grape"
      # 按逗号、分号、竖线或空格分割
      result = re.split(r'[;,| ]+', text)
      print(result)  # 输出: ['apple', 'orange', 'banana', 'grape']
      # 限制分割 2 次
      result2 = re.split(r'[;,| ]+', text, maxsplit=2)
      print(result2)  # 输出: ['apple', 'orange', 'banana | grape']

编译与性能优化方法

  • re.compile(pattern, flags=0)
    • 作用:将正则表达式模式编译成一个 正则表达式对象,该对象拥有 matchsearchfindallsub 等方法,重复使用同一模式时效率更高。
    • 示例
      pattern = re.compile(r'\d+')
      result1 = pattern.findall('abc123')  # ['123']
      result2 = pattern.search('xyz456')   # 匹配对象

常用标志(flags

所有方法都可以通过 flags 参数调整匹配行为,常用标志有:

标志 缩写 含义
re.I re.IGNORECASE 忽略大小写
re.M re.MULTILINE 多行模式, 匹配每行开头, 匹配每行结尾
re.S re.DOTALL 让 匹配包括换行符在内的所有字符
re.X re.VERBOSE 允许正则表达式中添加空白和注释,提高可读性

综合示例

import re
# 编译一个忽略大小写的模式
pattern = re.compile(r'\bpython\b', re.I)
text = "Python is great. I love python and PYTHON."
# 搜索第一个
match = pattern.search(text)
if match:
    print(f"Found: {match.group()} at position {match.start()}")  # Found: Python at position 0
# 查找所有
all_matches = pattern.findall(text)
print(all_matches)  # ['Python', 'python', 'PYTHON']
# 替换
new_text = pattern.sub('Java', text)
print(new_text)  # "Java is great. I love Java and Java."
# 分割
parts = re.split(r'[.!\s]+', text)
print(parts)  # ['Python', 'is', 'great', 'I', 'love', 'python', 'and', 'PYTHON', '']
  • 最常用search(找第一个)、findall(找所有)、sub(替换)、split(分割)。
  • 查找match 只查开头,search 查全文,findall 查全部返回列表,finditer 查全部返回迭代器。
  • 建议:如果同一正则多次使用,先 compile 提高效率;处理复杂替换逻辑时,使用函数作为 subrepl 参数。

标签: findall re.search

抱歉,评论功能暂时关闭!