Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/18.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
Regex 用它替换可变数量的数字';总和_Regex_Python 3.x - Fatal编程技术网

Regex 用它替换可变数量的数字';总和

Regex 用它替换可变数量的数字';总和,regex,python-3.x,Regex,Python 3.x,我需要找到一种方法,用方括号中的数字之和替换方括号中的n个数字,前提是这些括号彼此相邻;e、 g A[5][3]B[1.5]C[2.3][1.3][5] 变成: A[8]B[1.5]C[6] 我找到的最接近的正则表达式(首先用于匹配这些括号)如下所示: r'(\[[^\[\]]*\]){2,}' 但是,对于这个正则表达式,我只匹配最后一次出现(在上一个示例中:[3]和[5]) 有人能帮我吗?你可以用 import re s = "A[5][3]B[1.5]C[2.3][-1.3][5]" rx

我需要找到一种方法,用方括号中的数字之和替换方括号中的n个数字,前提是这些括号彼此相邻;e、 g

A[5][3]B[1.5]C[2.3][1.3][5]

变成:

A[8]B[1.5]C[6]

我找到的最接近的正则表达式(首先用于匹配这些括号)如下所示:

r'(\[[^\[\]]*\]){2,}'
但是,对于这个正则表达式,我只匹配最后一次出现(在上一个示例中:[3]和[5])

有人能帮我吗?

你可以用

import re
s = "A[5][3]B[1.5]C[2.3][-1.3][5]"
rx = re.compile(r"(?:\[-?\d*\.?\d+]){2,}")
print( rx.sub(lambda m: "[{:g}]".format(sum([float(n) for n in m.group()[1:-1].split('][')])), s) )
# => A[8]B[1.5]C[6]

实际上,您甚至可以在正则表达式中尝试此代码,但请注意,
[^][]
匹配除
]
[
之外的任何字符,而
-?\d*\。\d+
匹配可选的
-
,0+位,可选的
位,然后是1+位,从而匹配负数或正数和整数

在这里,
(?:\[-?\d*\.?\d+]){2,}
匹配两个或多个重复的
[]
s,替换中的lambda表达式去掉第一个和最后一个
[
]
并用
][
拆分,以获得被转换为浮点然后求和的数字列表。
{:g}
str.format
中的
打印一个类似整数的整数,或者保持浮点值不变。

是否可能重复?