文章目录
如何使用 Python 的
re.split()
方法通过正则表达式分割字符串。
栗子:
import re
s = "apple123banana456orange"
print(re.split(r"\d+", s)) # 输出: ['apple', 'banana', 'orange']
-
import re
导入 Python 的正则表达式模块。 -
s = "apple123banana456orange"
定义了一个包含字母和数字的字符串。 -
re.split(r"\d+", s)
r"\d+"
是一个正则表达式:\d
匹配任意数字(等价于[0-9]
)+
表示匹配前面的模式 1 次或多次r
前缀表示原始字符串(防止转义字符干扰)
- 这个正则表达式会匹配一个或多个连续的数字
-
分割结果
字符串会在所有连续数字的位置被分割,生成一个列表:"apple123banana456orange"
→ 在123
和456
处分割- 结果:
['apple', 'banana', 'orange']
关键点:
- 数字被完全移除:所有匹配
\d+
的部分都不会出现在结果中 - 连续匹配:如果字符串以数字开头或结尾,结果中会有空字符串:
s = "123apple456banana789" print(re.split(r"\d+", s)) # 输出: ['', 'apple', 'banana', '']
进阶用法:
-
保留分隔符
如果想保留数字作为单独列表项:print(re.split(r"(\d+)", s)) # 输出: ['apple', '123', 'banana', '456', 'orange']
-
更复杂的分隔符
匹配多种分隔符(如数字和特殊符号):s = "apple,123;banana?456!orange" print(re.split(r"[\d,;?!]+", s)) # 输出: ['apple', 'banana', 'orange']
-
限制分割次数
通过maxsplit
参数:print(re.split(r"\d+", s, maxsplit=1)) # 输出: ['apple', 'banana456orange']
对比普通 split()
:
方法 | 分隔符类型 | 功能复杂度 | 性能 |
---|---|---|---|
str.split() |
固定字符串 | 简单 | 更快 |
re.split() |
正则表达式模式 | 复杂(支持模式匹配) | 较慢 |
典型应用场景:
- 解析日志文件(如分割
"ERROR 2023-01-01: Something failed"
) - 处理混合格式数据(如
"Alice25Bob30Charlie"
) - 清理非结构化文本中的数字/符号
如果需要处理更复杂的分割逻辑,正则表达式会非常有用的。