ZetCode

Python re.split 函数

最后修改于 2025 年 4 月 20 日

re.split 简介

re.split 函数是 Python 的 re 模块中的一个强大工具。它使用正则表达式作为分隔符分割字符串。

str.split 不同,re.split 提供了更灵活的分割方式,它基于模式而不是固定字符串。它可以高效地处理复杂的分隔符情况。

该函数返回一个字符串列表,这些字符串是通过在输入字符串中每个与模式匹配的位置进行分割而获得的。空匹配会导致空字符串。

基本语法

re.split 的语法是

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

pattern 是用于分割的正则表达式。string 是输入文本。maxsplit 限制分割次数,而 flags 修改模式行为。

基本字符串分割

让我们从一个简单的示例开始,以空格分割。

basic_split.py
#!/usr/bin/python

import re

text = "apple banana cherry date"
result = re.split(r'\s+', text)

print("Split result:", result)

这会在每个空格字符序列处分割字符串。 \s+ 模式匹配一个或多个空格字符。

result = re.split(r'\s+', text)

re.split 函数接受模式和输入字符串。它返回匹配项之间的子字符串列表。

按多个分隔符分割

re.split 可以在一次操作中处理多种分隔符类型。

multi_delimiter.py
#!/usr/bin/python

import re

text = "apple,banana;cherry date:fig"
result = re.split(r'[,;:\s]+', text)

print("Split result:", result)

这会在逗号、分号、冒号或空格处分割。字符类 [,;:\s] 匹配这些分隔符中的任何一个。

使用 maxsplit 限制分割次数

maxsplit 参数控制发生的分割次数。

maxsplit_example.py
#!/usr/bin/python

import re

text = "one two three four five six"
result = re.split(r'\s+', text, maxsplit=2)

print("Limited split:", result)

使用 maxsplit=2,只有前两个空格序列触发分割。字符串的其余部分在最后一个元素中保持不变。

带捕获组的分割

当模式包含捕获组时,这些组将包含在结果中。

capture_groups.py
#!/usr/bin/python

import re

text = "appleXbananaYcherryZdate"
result = re.split(r'([XYZ])', text)

print("Split with delimiters:", result)

括号创建一个捕获组。匹配的分隔符 (X, Y, Z) 出现在分割段之间的结果列表中。

按单词边界分割

单词边界 (\b) 提供了另一个有用的分割点。

word_boundaries.py
#!/usr/bin/python

import re

text = "HelloWorldThisIsCamelCase"
result = re.split(r'(?<=[a-z])(?=[A-Z])', text)

print("CamelCase split:", result)

这通过查找小写字母到大写字母的转换来分割 camelCase 单词。后向和前向断言不消耗字符。

分割时保留分隔符

使用前瞻/后顾断言可以在输出中保留分隔符。

keep_delimiters.py
#!/usr/bin/python

import re

text = "20+30-40*50/60"
result = re.split(r'(?<=[+*/-])|(?=[+*/-])', text)

print("Split with operators:", result)

这会分割数学表达式,同时保留运算符。该模式匹配运算符之前或之后的位置,而不消耗它们。

使用标志分割

标志可以修改分割行为,例如不区分大小写的匹配。

flags_example.py
#!/usr/bin/python

import re

text = "appleBananaCHERRYdateFIG"
result = re.split(r'[A-Z]+', text, flags=re.IGNORECASE)

print("Case-insensitive split:", result)

re.IGNORECASE 标志使模式在分割时同样匹配大写字母和小写字母。

最佳实践

使用 re.split 时,请考虑以下最佳实践

性能注意事项

对于使用固定字符串进行简单分割,str.split 更快。当需要模式匹配时,re.split 更有优势。

重复分割时,使用 re.compile 编译模式可以提高性能。编译开销会在多次使用中分摊。

来源

Python re.split() 文档

本教程涵盖了 Python 的 re.split 函数的基本方面。掌握基于正则表达式的分割可以实现灵活的字符串处理。

作者

我的名字是 Jan Bodnar,我是一位充满热情的程序员,拥有丰富的编程经验。自 2007 年以来,我一直在撰写编程文章。到目前为止,我撰写了 1,400 多篇文章和 8 本电子书。我拥有超过十年的编程教学经验。

列出所有 Python 教程