Python 的 re.split()


如何使用 Python 的 re.split() 方法通过正则表达式分割字符串。

栗子:

import re
s = "apple123banana456orange"
print(re.split(r"\d+", s))   # 输出: ['apple', 'banana', 'orange']
  1. import re
    导入 Python 的正则表达式模块。

  2. s = "apple123banana456orange"
    定义了一个包含字母和数字的字符串。

  3. re.split(r"\d+", s)

    • r"\d+" 是一个正则表达式:
      • \d 匹配任意数字(等价于 [0-9]
      • + 表示匹配前面的模式 1 次或多次
      • r 前缀表示原始字符串(防止转义字符干扰)
    • 这个正则表达式会匹配一个或多个连续的数字
  4. 分割结果
    字符串会在所有连续数字的位置被分割,生成一个列表:

    • "apple123banana456orange" → 在 123456 处分割
    • 结果:['apple', 'banana', 'orange']

关键点:

  • 数字被完全移除:所有匹配 \d+ 的部分都不会出现在结果中
  • 连续匹配:如果字符串以数字开头或结尾,结果中会有空字符串:
    s = "123apple456banana789"
    print(re.split(r"\d+", s))  # 输出: ['', 'apple', 'banana', '']
    

进阶用法:

  1. 保留分隔符
    如果想保留数字作为单独列表项:

    print(re.split(r"(\d+)", s))  # 输出: ['apple', '123', 'banana', '456', 'orange']
    
  2. 更复杂的分隔符
    匹配多种分隔符(如数字和特殊符号):

    s = "apple,123;banana?456!orange"
    print(re.split(r"[\d,;?!]+", s))  # 输出: ['apple', 'banana', 'orange']
    
  3. 限制分割次数
    通过 maxsplit 参数:

    print(re.split(r"\d+", s, maxsplit=1))  # 输出: ['apple', 'banana456orange']
    

对比普通 split()

方法 分隔符类型 功能复杂度 性能
str.split() 固定字符串 简单 更快
re.split() 正则表达式模式 复杂(支持模式匹配) 较慢

典型应用场景:

  • 解析日志文件(如分割 "ERROR 2023-01-01: Something failed"
  • 处理混合格式数据(如 "Alice25Bob30Charlie"
  • 清理非结构化文本中的数字/符号

如果需要处理更复杂的分割逻辑,正则表达式会非常有用的。