首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >python regex只保留以字母表开头并以[a-zA-Z0-9]继续的单词。

python regex只保留以字母表开头并以[a-zA-Z0-9]继续的单词。
EN

Stack Overflow用户
提问于 2018-11-01 09:41:32
回答 1查看 151关注 0票数 1

鉴于这篇文章“嗨,a2a 3美容侯\se heyYou2",我只想保留以字母开头并以A、A或数字继续的单词。这就是我想要的输出:“嗨,a2a heyYou2”。

到目前为止,我的解决方案通过text.split()函数:

代码语言:javascript
复制
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实现这一点的方法,而不将文本拆分成一个单词列表?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-11-01 10:29:59

您可以在以下正则表达式中使用单个re.sub调用:

代码语言:javascript
复制
\s*(?<!\S)(?![a-zA-Z][a-zA-Z0-9]*(?!\S))\S+

regex演示

详细信息

  • \s* - 0+白空间
  • (?<!\S) -一个领先的空白边界
  • (?![a-zA-Z][a-zA-Z0-9]*(?!\S)) -如果在当前位置的右侧立即有,则会导致匹配失败。
    • [a-zA-Z]一封信
    • [a-zA-Z0-9]* -0或更多字母数字字符
    • (?!\S) -尾随空格边界

  • \S+ -一个或多个非空白字符

Python代码演示

代码语言:javascript
复制
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
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53098632

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档