鉴于这篇文章“嗨,a2a 3美容侯\se heyYou2",我只想保留以字母开头并以A、A或数字继续的单词。这就是我想要的输出:“嗨,a2a heyYou2”。
到目前为止,我的解决方案通过text.split()函数:
text = "hey a2a 3beauty hou\se heyYou2"
text = text.split()
text = [w for w in text if re.search(r"^[a-zA-Z][a-zA-Z0-9]*$", w) is not None]
' '.join(text)
Out[55]: 'hey a2a heyYou2'有没有一种快速,更有效,我可以使用regex实现这一点的方法,而不将文本拆分成一个单词列表?
发布于 2018-11-01 10:29:59
您可以在以下正则表达式中使用单个re.sub调用:
\s*(?<!\S)(?![a-zA-Z][a-zA-Z0-9]*(?!\S))\S+详细信息
\s* - 0+白空间(?<!\S) -一个领先的空白边界(?![a-zA-Z][a-zA-Z0-9]*(?!\S)) -如果在当前位置的右侧立即有,则会导致匹配失败。[a-zA-Z]一封信[a-zA-Z0-9]* -0或更多字母数字字符(?!\S) -尾随空格边界
\S+ -一个或多个非空白字符import re
text = "hey a2a 3beauty hou\se heyYou2"
print(re.sub(r"\s*(?<!\S)(?![a-zA-Z][a-zA-Z0-9]*(?!\S))\S+", "", text))
# => hey a2a heyYou2https://stackoverflow.com/questions/53098632
复制相似问题