gpt4 book ai didi

python - 删除Python中带空格或 "-"的单词

转载 作者:行者123 更新时间:2023-12-01 01:41:41 25 4
gpt4 key购买 nike

这是问题 here 的扩展

现在就像链接的问题一样,答案使用 space? 作为正则表达式模式来匹配包含空格或不包含空格的字符串。

问题陈述:

我有一个字符串和一个短语数组。

input_string = 'alice is a character from a fairy tale that lived in a wonder land. A character about whome no-one knows much about'

phrases_to_remove = ['wonderland', 'character', 'noone']

现在我想做的是从 input_string 中删除数组 phrases_to_remove 中最后出现的单词。

output_string = 'alice is a character from a fairy tale that lived in a. A about whome knows much about'

注意:要删除的单词可能出现在字符串中,也可能不出现,如果出现,它们可能以相同的形式出现:{'wonderland' 或 'character', 'noone'}或者它们可能在单词之间带有空格或连字符 (-),例如仙境,无人,人物。

代码的问题是,我无法删除空格-不匹配的单词。例如wonder landwonderlandwonder-land

我尝试将 (-)?|( )? 作为正则表达式,但无法使其工作。

我需要帮助

最佳答案

你的正则表达式的问题是分组。使用(-)?|( )?因为分隔符的作用并不像您想象的那样。

考虑当单词列表为 a,b 时会发生什么:

>>> regex = "(-)?|( )?".join(["a", "b"])
>>> regex
'a(-)?|( )?b'

您希望此正则表达式匹配 aba ba-b ,但显然它并没有这样做。它匹配 a , a- , b<space>b相反!

>>> re.match(regex, 'a')
<_sre.SRE_Match object at 0x7f68c9f3b690>
>>> re.match(regex, 'a-')
<_sre.SRE_Match object at 0x7f68c9f3b718>
>>> re.match(regex, 'b')
<_sre.SRE_Match object at 0x7f68c9f3b690>
>>> re.match(regex, ' b')
<_sre.SRE_Match object at 0x7f68c9f3b718>

要解决此问题,您可以将分隔符包含在其自己的组中:([- ])? .

如果您还想匹配像 wonder - land 这样的单词(即连字符之前/之后有空格)您应该使用以下 (\s*-?\s*)? .

关于python - 删除Python中带空格或 "-"的单词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51819606/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com