迹忆客 专注技术分享

当前位置:主页 > 学无止境 > 编程语言 > Python >

如何在 Python 中基于多个定界符分割字符串

作者:迹忆客 最近更新:2023/02/28 浏览次数:

Python 字符串 split() 方法允许根据分隔符将字符串轻松拆分为列表。尽管在某些情况下,你可能需要不仅基于一个分隔符值,而且还要基于多个定界符值进行分隔。这篇文章介绍了可以在 Python 中实现的两种便捷方法。

假设以下字符串。

text = "python is, an easy;language; to, learn."

对于我们的示例,我们需要用分号,空格 (; ) 或逗号和空格 (, ) 进行拆分。在这种情况下,不应该考虑出现任何奇数的分号或逗号,即没有尾部空格的 ,;

尽管正则表达式的使用由于字符串解析的昂贵特性而不被推荐使用,但是在这种情况下可以放心使用正则表达式。

Python 的内置模块 re 具有一种可用于这种情况的 split() 方法。

让我们使用基本的 a 或 b 正则表达式(a|b)来分隔多个定界符。

import re

text = "python is, an easy;language; to, learn."
print(re.split('; |, ', text))

输出:

['python is', 'an easy;language', 'to', 'learn.']

Wikipedia 页面所述,正则表达式使用 IEEE POSIX 作为其语法的标准。通过引用此标准,我们可以管理几种其他方式来编写符合用例的正则表达式。

无需使用竖线分隔符(|)来定义分隔符,我们可以使用正则表达式中提供的 Range([])语法实现相同的结果。你可以通过在方括号内提供正则表达式可以匹配的字符范围。

因此,当指定正则表达式的模式时,我们可以简单地在方括号内提供分号和逗号,以及一个额外的空格 [[;,]),这将导致正则表达式与具有[分号或逗号]和尾随空格。

import re

text = "python is, an easy;language; to, learn."
print(re.split("[;,] ", text))

前面提到的正则表达式仅限于硬编码的分隔符集。稍后在进行定界符修改时,这可能会带来麻烦,并且还会限制其在代码其他部分的可重用性。因此,最好使用最佳实践来考虑使代码更加通用和可重用。因此,为了安全起见,让我们将该逻辑编码到 Python 函数中。

import re
text = "python is, an easy;language; to, learn."
separators = "; ", ", "

def custom_split(sepr_list, str_to_split):
    # create regular expression dynamically
    regular_exp = '|'.join(map(re.escape, sepr_list))
    return re.split(regular_exp, str_to_split)

print(custom_split(separators, text))

如果你想避免使用正则表达式,或者不必为了拆分字符串而在项目中引入新模块,则可以使用 replace()split() 方法出现在字符串模块中本身达到相同的结果。

text = "python is, an easy;language; to, learn."

# transform [semicolon-space] parts of the string into [comma-space]
text_one_delimiter = text.replace("; ", ", ")

print(text_one_delimiter.split(", "))

首先,我们用其他定界符替换逗号中所有出现的分号,后跟空格 (; ),该分隔符是逗号,后跟空格 (, )。这样,我们可以将字符串拆分限制为一个定界符,在这种情况下,它是一个逗号,后跟一个空格 (, )

现在,我们可以使用 Python 字符串模块内置的简单 split() 函数安全地拆分修改后的字符串,以得到相同的结果。

请注意,这次我们尚未将任何新模块导入代码中以实现结果。

参考下面提到的文本。

text = "python is# an% easy;language- to, learn."

对于此示例,我们需要在所有实例上将其分割为文本具有任何字符 # % ; - ,,后跟一个空格。

在这种情况下,我们可以在定义正则表达式时轻松添加其他分隔符。

import re

text = "python is# an% easy;language- to, learn."
print(re.split('; |, |# |% |- ', text))

输出:

['python is', 'an', 'easy;language', 'to', 'learn.']

同样在这种情况下,我们可以简单地使用我们之前使用的带有两个定界符的代码,只需将所有其他分隔符添加到 separators 变量中即可。

import re
text = "python is# an% easy;language- to, learn."
separators = "; ", ", ", "# ", "% ", "- "

def custom_split(sepr_list, str_to_split):
    # create regular expression dynamically
    regular_exp = '|'.join(map(re.escape, sepr_list))
    return re.split(regular_exp, str_to_split)

print(custom_split(separators, text))

与我们之前使用两个定界符处理它的方式类似,我们可以使用 replace()split() 函数也可以解决此问题。

text = "python is, an easy;language; to, learn."

# transform [semicolon-space] parts of the string into [comma-space]
text_one_delimiter = text.replace("# ", ", ").replace("% ", ", ").replace("; ", ", ").replace("- ", ", ")

print(text_one_delimiter.split(", "))

输出:

['python is', 'an easy;language', 'to', 'learn.']

应该注意的是,在这种情况下,当用于更高的定界符计数时,不建议使用此方法。由于在这种情况下,必须多次使用字符串 replace() 方法才能对字符串进行多次遍历,因此最终将导致不希望的性能峰值,使用正则表达式可以轻松避免。

转载请发邮件至 1244347461@qq.com 进行申请,经作者同意之后,转载请以链接形式注明出处

本文地址:

相关文章

Django 中的 Slug

发布时间:2023/05/04 浏览次数:173 分类:Python

本篇文章旨在定义一个 slug 以及我们如何使用 slug 字段在 Python 中使用 Django 获得独特的帖子。

Django ALLOWED_HOSTS 介绍

发布时间:2023/05/04 浏览次数:181 分类:Python

本文展示了如何创建您的 Django 网站,为公开发布做好准备,如何设置 ALLOWED_HOSTS 以及如何在使用 Django 进行 Web 部署期间修复预期的主要问题。

Django 中的 Select_related 方法

发布时间:2023/05/04 浏览次数:129 分类:Python

本文介绍了什么是查询集,如何处理这些查询以及我们如何利用 select_related() 方法来过滤 Django 中相关模型的查询。

在 Django 中上传媒体文件

发布时间:2023/05/04 浏览次数:198 分类:Python

在本文中,我们简要介绍了媒体文件以及如何在 Django 项目中操作媒体文件。

Django 返回 JSON

发布时间:2023/05/04 浏览次数:106 分类:Python

在与我们的讨论中,我们简要介绍了 JSON 格式,并讨论了如何借助 Django 中的 JsonResponse 类将数据返回为 JSON 格式。

在 Django 中创建对象

发布时间:2023/05/04 浏览次数:59 分类:Python

本文的目的是解释什么是模型以及如何使用 create() 方法创建对象,并了解如何在 Django 中使用 save() 方法。

在 Django 中为多项选择创建字段

发布时间:2023/05/04 浏览次数:75 分类:Python

在本文中,我们将着眼于为多项选择创建一个字段,并向您展示如何允许用户在 Django 中进行多项选择。

扫一扫阅读全部技术教程

社交账号
  • https://www.github.com/onmpw
  • qq:1244347461

最新推荐

教程更新

热门标签

扫码一下
查看教程更方便