繁体   English   中英

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

[英]Why do I get those empty strings when using re.split() in python?

我将拆分 function 定义为lambda x: re.split('[(|)|.]', x) ,当我应用这个 ZC1C425268E68385D1AB5074C17A94F 时,它总是会生成一些空字符串4到我的原始字符串。 例如:

应用于字符串时:

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

结果是:

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

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

正则表达式匹配) , . , 和(单独。由于它们在输入中彼此相邻,因此它们之间有一个空字符串,因此结果包含这些空字符串。

如果要将分隔符序列视为单个分隔符,请将+量词添加到正则表达式,以便将它们作为序列匹配。

re.split('[|().]+', x)

开头的空字符串是因为第一个之前的空字符串( 。同样,末尾的空字符串来自最后一个之后的输入中的空字符串) 我认为没有一种简单的方法可以防止这些,只需将它们从结果中删除即可。

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

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']

您可以filter

filter(lambda x: x, re.split('[().]+', s))

测试:

import re
s = '(Type).(Terrorist organization)AND(Involved in attacks).(nine-eleven)'
print(list(filter(None, re.split('[().]+', s))))

结果:

['类型', '恐怖组织', 'AND', '参与袭击', '9-11']

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM