首页 > 解决方案 > 模式可以用于替换python中re.sub中的组吗

问题描述

目前,我正在为一项对于像我这样的 python 初学者来说似乎太复杂的任务而猛烈抨击。如果您能帮我解决这个问题,我将不胜感激。我正在尝试用点替换逗号。我希望它只针对 SQL 脚本中的特定元素(粗体值):

Insert into SEC_DATA (HEADER_ID,TIMESTMP,BOMLABEL,TI_TO_EX,HOLD_TI,STRIKE,STRIKE_FORM,SDVALUE,VALUE1,VALUE2) values ('Swaption-Volatilitдten','02/03/2016 00:00:00','DD/MM/YYYY HH24:MI:SS'),'BID','5400','10800','0','D','**0,595**','0','0');

Sooo,我决定使用正则表达式并做了以下事情:

x = "Insert into SEC_DATA (HEADER_ID,TIMESTMP,BOMLABEL,TI_TO_EX,HOLD_TI,STRIKE,STRIKE_FORM,SDVALUE,VALUE1,VALUE2) 
values ('Swaption-Volatilitдten','02/03/2016 00:00:00','DD/MM/YYYY HH24:MI:SS'),'BID','5400','10800','0','D','0,595','0','0');"

var = re.sub(r"(\d),(\d)", r"$1.$2", x)

我期待 $1 和 $2 保持组不变,因为我只想把逗号变成一个点。逗号周围的数字只是为了确保这是正确的逗号。

但是,无论我做什么,它总是会导致周围数字的变化:

...('Swaption-Volatilitдten',to_date('02/03/2016 00:00:00','DD/MM/YYYY HH24:MI:SS'),'BID','5400','10800','0','D','**$1.$2**95','0','0');

我该如何解决?

提前致谢。

内什

标签: sqlregexpython-3.x

解决方案


因此,这里的lambda函数似乎可以完成这项工作。解决方案如下所示:

import re
x = "Insert into SEC_DATA (HEADER_ID,TIMESTMP,BOMLABEL,TI_TO_EX,HOLD_TI,STRIKE,STRIKE_FORM,SDVALUE,VALUE1,VALUE2) values ('Swaption-Volatilitäten',to_date('02/03/2016 00:00:00','DD/MM/YYYY HH24:MI:SS'),'BID','5400','10800','0','D','0,595','0','0');"
var = re.sub(r"(\d),(\d)", lambda match: "%s.%s" % (match.group(1), match.group(2)), x)

投稿人: 用户pts对类似问题给出了准确的回答

谢谢和欢呼!


推荐阅读