我想用以下格式之一替换一个数字:200,200.99,300,555,除非它在<>标记之间。例如,我想跳过这个:<200>
这就是我想出的:
(?<!<)([\d,|.]+(?:\.\d{2})?)(?!>)
从regex101中测试它,我只跳过<和之前>之后的第一个和最后一个数字。
我正逐行迭代一个文本文件,我想替换以下所有出现的示例:
200
200.00
200.000
使用令牌,但如果该行已经在<>之间有一个数字然后跳过该行,为了澄清,我想在我的行中跳过以下值而不是由正则表达式替换:
<300>
这是我使用的代码:
current_line = re.sub("(?<!<)([\d,|.]+(?:\.\d{2})?)(?!>)", ' <num> ', current_line)
你能帮忙吗?
这不是您的要求的精确解决方案,但如果您将负面外观更改为正面外观,即断言该数字由空格或起始/结束锚定在两侧,那么您似乎得到了您想要的行为:
rx = r"(\s|^)([\d,|.]+(?:\.\d{2})?)(?=$|\s)"
s = "I would like to replace a number with one of the following formats: 200, 200.99, 300,555 unless its between the <> tokens. for example I would like to skip this: <200>"
print(re.findall(rx, s))
[(' ', '200,'), (' ', '200.99,'), (' ', '300,555')]
Demo
(由Wiktor提供)
这方面的一个限制是它不会匹配诸如<234
之类的术语,因为数字不会被两侧的空白/锚点所包围。但是,该模式确实正确地排除了标签中包围的数字。