示例文字
用户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
但是使用(?!)
无法忽略该模式以允许我获得所需的输出。
答案 0 :(得分:2)
您似乎只需更换独立数字即可。您有几种选择:
使用修改后的\s*\b\d\b
模式替换(替换为空字符串)
使用类似的正则表达式,但通过将图案包裹在一个组中并同时应用+
量词,一次抓住数字:(?:\s*\b\d\b)+
。
请注意\d{1}
= \d
,因为每个非量化原子都会尝试一次。
您可能希望在(?<!\S)
之前添加\d
lookbehind,在(?!\S)
之后预测\d
前瞻,以确保数字周围没有非空白符号,但我怀疑在这种情况下,它们是多余的。
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