python - 使用逗号或点捕获数字的正则表达式,除非在令牌之间

问题描述 投票:1回答:1

我想用以下格式之一替换一个数字: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)

你能帮忙吗?

python regex regex-negation
1个回答
1
投票

这不是您的要求的精确解决方案,但如果您将负面外观更改为正面外观,即断言该数字由空格或起始/结束锚定在两侧,那么您似乎得到了您想要的行为:

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之类的术语,因为数字不会被两侧的空白/锚点所包围。但是,该模式确实正确地排除了标签中包围的数字。

© www.soinside.com 2019 - 2024. All rights reserved.