Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.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 - Fatal编程技术网

Python中选择特定子字符串的正则表达式替换

Python中选择特定子字符串的正则表达式替换,python,Python,以下是我希望发生的事情: input = "asdsad,200200-12964,0009,""TREASURY SETTLEMENT NON-COMPLIANCE ASSESSMENT FOR CPD2020-01-21 USD 589,037.17"" 0.00000000,1.000000" output = "asdsad,200200-12964,0009,""TREASURY SETTLEMENT NON-COMPLIANCE ASSESSMENT FOR CPD2020-01-

以下是我希望发生的事情:

input = "asdsad,200200-12964,0009,""TREASURY SETTLEMENT NON-COMPLIANCE ASSESSMENT FOR CPD2020-01-21 USD 589,037.17"" 0.00000000,1.000000"

output = "asdsad,200200-12964,0009,""TREASURY SETTLEMENT NON-COMPLIANCE ASSESSMENT FOR CPD2020-01-21 USD 589.037.17"" 0.00000000,1.000000"
如何使用正则表达式将Python中
“…589037.17…”
之间的逗号(
)更改为点(

Extra: 589,037.17 => 589.037.17
我试过:

print(re.sub(r'(?<=\d),', '.', input))

首先,不要调用变量
input
,因为它会覆盖内置函数
input()
。此外,在Python中,重复的字符串只是一个字符串

i = 'asdsad,200200-12964,0009,TREASURY SETTLEMENT NON-COMPLIANCE ASSESSMENT FOR CPD2020-01-21 USD 589,037.17 0.00000000,1.000000'
为了解决您的具体情况,您可以在逗号前的价格的第一位匹配国家代码后面的3个数字。这是可行的,但对于任何国家/地区代码和任何价格来说,可能都不够通用,因为look behind必须是固定宽度的

print(re.sub(r'(?<=USD \d{3}),', '.', i))
print(re.sub(r')(?
输出:

asdsad,200200-12964,0009,TREASURY SETTLEMENT NON-COMPLIANCE ASSESSMENT FOR CPD2020-01-21 USD 589,037.17 0.00000000,1.000000
asdsad,200200-12964,0009,TREASURY SETTLEMENT NON-COMPLIANCE ASSESSMENT FOR CPD2020-01-21 USD 589.037.17 0.00000000,1.000000

您可以通过此链接进行记录。

您得到的是上面提到的输出,真正的输出是什么?很难看到,但第一位有一个点改变了,OP只想在价格上改变它。
print(re.sub(r'(?<=[A-Z]{3} )(\d+),', r'\1.', i))
import re

input = "asdsad,200200-12964,0009,""TREASURY SETTLEMENT NON-COMPLIANCE ASSESSMENT FOR CPD2020-01-21 USD 589,037.17"" 0.00000000,1.000000"
print(input)
print(re.sub(r'USD (\d+),(\d+)', r'USD \1.\2', input))
asdsad,200200-12964,0009,TREASURY SETTLEMENT NON-COMPLIANCE ASSESSMENT FOR CPD2020-01-21 USD 589,037.17 0.00000000,1.000000
asdsad,200200-12964,0009,TREASURY SETTLEMENT NON-COMPLIANCE ASSESSMENT FOR CPD2020-01-21 USD 589.037.17 0.00000000,1.000000