[英]Regex for [a-zA-Z0-9\-] with dashes allowed in between but not at the start or end
[英]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+
- 一个或多个非空白字符 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.