python - 为什么在 python 中使用 re.split() 时会得到那些空字符串?

标签 python python-3.x

我将拆分函数定义为 lambda x: re.split('[(|)|.]', x),当我将此函数应用于我的原始字符串时,它总是生成一些空字符串。例如:

应用于字符串时:

(Type).(Terrorist organization)AND(Involved in attacks).(nine-eleven)

结果是:

['', 'Type', '', '', 'Terrorist organization', 'AND', 'Involved in attacks', '', '', 'nine-eleven', '']

我知道我可以简单地手动删除那些空字符串,但是有什么聪明的方法可以删除它们吗?

最佳答案

使用 + 获取尽可能多的分隔符,而不是只获取一个:

re.split('[().]+', s)

不幸的是,这还不够,因为众所周知,re.split 在字符串的开头和结尾处生成空字符串:

['', 'Type', 'Terrorist organization', 'AND', 'Involved in attacks', 'nine-eleven', '']

但您可以使用后处理将它们过滤掉:

[x for x in re.split('[().]+', s) if x]

另一方面,您可以还原正则表达式并使用 re.findall 来匹配尽可能多的非分隔符:

re.findall('[^().]+', s)

这直接产生:

['Type', 'Terrorist organization', 'AND', 'Involved in attacks', 'nine-eleven']

关于python - 为什么在 python 中使用 re.split() 时会得到那些空字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58242452/

相关文章:

python - Django SELECT 语句,排序依据

python - 有谁有 Google App Engine 上 python 中 AES 加密的代码示例吗?

python - 在 Python 上对不同深度的列表子列表进行排列,同时保持它们独立

python - 是否可以像在 Entry 中一样通过单击来更改 canvas.create_text 中的内容?

python - 匹配多列值的函数

python - 如何使用 python 在 Django 应用程序中安排任务

python - 将文件中的所有变量导入列表

Python Selenium Webdriver - 即时更改代理设置

django - 通过模板使用 django 管理 pdf 并作为电子邮件附件发送

Python:使用多个文本文件时如何仅使用 1 列?