Python 拆分含多种分隔符字符串的两种实现方式

Felix
Felix
发布时间:2026-10-10 | 2人浏览过
原创

在处理包含多种分隔符(如分号、点、加号)的字符串时,Python 提供了多种拆分策略。本文对比了基于 `str.split()` 的循环处理与基于 `re.split()` 的正则表达式一次性拆分方法,重点解析正则表达式的构建技巧及空字符串过滤逻辑,帮助开发者选择更高效的字符串处理方案。

问题场景

假设我们需要处理一个包含多种分隔符的字符串,例如:'12;;7.osjd;.jshdjdknx+'。该字符串中同时存在分号(;)、点(.)和加号(+)。我们的目标是将该字符串拆分为非空的子字符串列表。

方法一:循环使用 str.split()

如果不使用正则表达式,可以通过循环调用 str.split() 来逐个处理分隔符。这种方法逻辑直观,但代码相对冗长。

#!/usr/bin/python3

def go_split(s, symbol):
  result = [s]
  for i in symbol:
    median = []
    # 使用 map 高阶函数处理拆分
    for z in map(lambda x: x.split(i), result):
      median.extend(z)
    # 更新结果列表
    result = median
  # 去除空字符串
  return [x for x in result if x]

if __name__ == "__main__":
  s = '12;;7.osjd;.jshdjdknx+'
  symbol = ';./+'
  result = go_split(s, symbol)
  print(result)

该方法的执行流程如下:

  1. 初始化 result 为包含原始字符串的列表。
  2. 遍历 symbol 中的每个分隔符。
  3. 对 result 中的每个字符串调用 split(i),并将结果展平到 median。
  4. 将 median 赋值给 result,进入下一个分隔符的处理。
  5. 最后过滤掉空字符串。

方法二:使用 re.split() 一次性拆分(推荐)

使用正则表达式模块 re 可以一次性处理所有分隔符,代码更简洁且效率更高。

#!/usr/bin/python3
import re

def go_split(s, symbol):
  # 拼接正则表达式,使用 [] 包含所有分隔符,+ 表示匹配一个或多个
  symbol = "[" + symbol + "]+"
  # 一次性分割字符串
  result = re.split(symbol, s)
  # 去除空字符
  return [x for x in result if x]

if __name__ == "__main__":
  s = '12;;7.osjd;.jshdjdknx+'
  symbol = ';./+'
  result = go_split(s, symbol)
  print(result)

关键点解析

  • 正则表达式构建:将分隔符字符串(如 ';./+')转换为 '[;./]+'。其中 [] 表示字符集,匹配其中的任意一个字符;+ 表示匹配一个或多个连续的分隔符,这能有效处理连续分隔符产生的空字符串问题。
  • 空字符串过滤:尽管正则表达式中的 + 能减少空字符串的产生,但为了保险起见,仍使用列表推导式 [x for x in result if x] 过滤掉可能存在的空字符串。

总结

对于包含多种分隔符的字符串拆分任务,推荐使用 re.split() 配合正则表达式。这种方法不仅代码简洁,而且能更好地处理连续分隔符的情况。普通循环拆分方法虽然直观,但在分隔符较多时性能较差且代码复杂。

以上就是 Python 拆分含多种分隔符字符串的详细内容,更多关于 Python 字符串处理技巧的资料请关注本站其它相关文章!

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表