正则表达式:显示除一位数之外的所有内容

时间:2016-09-15 19:36:20

标签: regex

示例文字

  

用户1 2 3 4 5 6 7 10000 100007 user.b user.x 30000 80001   user.c的

所需输出

  

User 10000 100007 user.b user.x 30000 80001 user.c

当前解决方案

我可以匹配我想要的内容:\b\d{1}\b 来自该正则表达式的匹配是:1 2 3 4 5 6 7但是使用(?!)无法忽略该模式以允许我获得所需的输出。

1 个答案:

答案 0 :(得分:2)

您似乎只需更换独立数字即可。您有几种选择:

  • 使用修改后的\s*\b\d\b模式替换(替换为空字符串)

  • 使用类似的正则表达式,但通过将图案包裹在一个组中并同时应用+量词,一次抓住数字:(?:\s*\b\d\b)+

请注意\d{1} = \d,因为每个非量化原子都会尝试一次。

您可能希望在(?<!\S)之前添加\d lookbehind,在(?!\S)之后预测\d前瞻,以确保数字周围没有非空白符号,但我怀疑在这种情况下,它们是多余的。

Python demo

import re
s = "User 1 2 3 4 5 6 7 10000 100007 user.b user.x 30000 80001 user.c"
res = re.sub(r'(?:\s*\b\d\b)+', '', s)
print(res)
# => User 10000 100007 user.b user.x 30000 80001 user.c