繁体   English   中英

python正则表达式只保留以字母开头的单词并继续[a-zA-Z0-9]

[英]python regex keep only words that start with alphabet and continues with [a-zA-Z0-9]

鉴于这段文字“hey a2a 3beauty hou \\ se heyYou2”,我想只保留以alphabeth开头并继续使用az,AZ或数字的单词。 所以这将是我想要的输出:“嘿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'

有没有一种快速,高效的方法,我可以使用正则表达式实现这一点,而不将文本分成单词列表?

您可以使用以下正则表达式的单个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+ - 一个或多个非空白字符

Python代码演示

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 heyYou2

暂无
暂无

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

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