Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/351.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
python-正则表达式捕获带有逗号或点的数字,除非标记之间有逗号或点_Python_Regex_Regex Negation - Fatal编程技术网

python-正则表达式捕获带有逗号或点的数字,除非标记之间有逗号或点

python-正则表达式捕获带有逗号或点的数字,除非标记之间有逗号或点,python,regex,regex-negation,Python,Regex,Regex Negation,我想用以下格式之一替换数字: 200, 200.99, 300,555 除非是在代币之间。 例如,我想跳过以下内容: 这就是我想到的: (?<!<)([\d,|.]+(?:\.\d{2})?)(?!>) 使用令牌,但如果行之间已经有一个数字,则跳过该行,为了澄清,我想跳过行中的以下值,而不是用正则表达式替换: <300> 这是我使用的代码: current_line = re.sub("(?<!<)([\d,|.]+(?:\.\d{2})?)(

我想用以下格式之一替换数字: 200, 200.99, 300,555 除非是在代币之间。 例如,我想跳过以下内容:

这就是我想到的:

(?<!<)([\d,|.]+(?:\.\d{2})?)(?!>)
使用令牌,但如果行之间已经有一个数字,则跳过该行,为了澄清,我想跳过行中的以下值,而不是用正则表达式替换:

<300>

这是我使用的代码:

current_line = re.sub("(?<!<)([\d,|.]+(?:\.\d{2})?)(?!>)", ' <num> ', current_line)
current_line=re.sub(“(?)”,“”,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')]
rx=r“(\s |^)([\d,|.]+(?:\。\d{2})(?=$|\s)”
s=“我想用以下格式之一替换一个数字:200、200.99、300555,除非它在令牌之间。例如,我想跳过此选项:”
打印(关于findall(rx,s))
[(' ', '200,'), (' ', '200.99,'), (' ', '300,555')]
(维克托提供)


其中一个限制是,它与诸如
之类的术语不匹配。您可以添加一些示例数据吗?是否要替换
文本中的
234
,然后我在主题中编写了示例,我将进一步澄清。正则表达式的问题,例如输入
,如果只匹配中间的
0
,左右看两边的数字,就可以满足负环视。因此,只有
中的数字不应该被替换?或与
\d(?:[,\d]*\d)?
模式?对应的任何数字?。不要盲目地遵循regex101,这并不能证明该模式在目标环境中有效。@WiktorStribiżew我们可以抛弃消极的查找,因为
findall
足够复杂,可以使用捕获组。只是不要捕获模式的主要部分。行为确实是我想要的,但正如前面所说的,它在python中不起作用,有任何修改它的建议吗?@Andreyn“不起作用”是一个模糊的概念。它在Python中工作,但是这个答案真的满足您所有的用例吗?只有你能回答这个问题。@TimBiegeleisen修改后的正则表达式确实有效,谢谢!
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')]