正则表达式:将单词与侵入性符号相匹配

2024-04-26

我试图将所有“单词”与侵入性星号相匹配,包括开头和结尾(但没有其他标点符号)。

例如,我期待下面的七场比赛。相反,我得到了两个。

text = "star *tar s*ar st*r sta* (*tar) (sta*) sta*."
p = re.compile(r"\b\w*\*+\w*\b")
p.findall(text) # ['s*ar', 'st*r']
# Expected ['*tar', 's*ar', 'st*r', 'sta*', '*tar', 'sta*', 'sta*']

我明白原因是星号不被认为是由\b元字符,但是在阅读了所有 Python 的内容之后How-to https://docs.python.org/3/howto/regex.html#regex-howto,我还是不太知道如何得到我想要的。


感谢您对预期输出进行编辑。

因此,除了 @benvc 提供的出色解决方案之外,这个解决方案还考虑了递归,因此如果您希望捕获文本何时具有多个*'是整个找到的字符串将被捕获并且不会忽略其他*'s

#Acting on your original text string
>>> text = "star *tar s*ar st*r sta* (*tar) (sta*) sta*."
>>> re.findall('((?:[a-z\*]*(?:\*)(?:[a-z\*]*)))+', text)
['*tar', 's*ar', 'st*r', 'sta*', '*tar', 'sta*', 'sta*']



#Acting on a slightly **MORE COMPLEX** string and returning it accurately
>>> text = "*tar *tar* star s*a**r *st*r* sta* (*tar) st*r** (sta**) s*ta*."
>>> re.findall('((?:[a-z\*]*(?:\*)(?:[a-z\*]*)))+', text)
['*tar', '*tar*', 's*a**r', '*st*r*', 'sta*', '*tar', 'st*r**', 'sta**', 's*ta*']

.

如果您希望我解释其工作原理(如果您可能需要它以供将来参考),请告诉我。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

正则表达式:将单词与侵入性符号相匹配 的相关文章

随机推荐