如何在一行文本的每个小数点后两位插入分隔符



这里没有。。。我正在学习python,并尝试对一行文本进行切片以插入分隔符","。我似乎找不到每一个小数点在两位以上插入一个分隔符。我可以用第一个小数来做,但不能用其他小数。感谢您的帮助。

我想要:4743 i03/2064.034764 i03/2021.304745*i03/29111.854765 i03/2592.50

line = '4743 i03/2064.034764 i03/2021.304745*i03/29111.854765 i03/2592.50'
index = line.find('.')
output_line = line[:index+3] + ',' + line[index+3:]
print( output_line )

您可以使用正则表达式来解决此问题

import re
line = '4743 i03/2064.034764 i03/2021.304745*i03/29111.854765 i03/2592.50'
line = re.sub(r'(..{2})', r'1,', line)
print(line)

输出:

4743 i03/2064.03,4764 i03/2021.30,4745*i03/29111.85,4765 i03/2592.50,

但是,请注意,最后一个分组也将返回.50,,因为它仍然与问题中给定的规则相匹配。

你可以在这里阅读正则表达式。


让我们分解一下re.sub函数内部发生的事情。

在命令的文档中,我们可以看到它有以下参数:

re.sub(pattern, repl, string, count=0, flags=0)

让我们看看我们的模式:

r'(..{2})'

首先,我们在创建字符串之前添加前缀r,将其设置为raw字符串。您可以在此处阅读。简短的版本:它告诉我们像这样的字符应该被解释为字面反斜杠。

然后,我们通过用()包围我们的模式来创建capture-group。之后,我们用反斜杠escape.,因为在正则表达式中,.与所有字符匹配(如果使用正确的标志(。

所以,现在我们有了这个r'(.)',它与字符串中的文字.相匹配。然而,我们还想在之后与两个尾随字符进行匹配。

我们使用前面提到的.来匹配所有字符,但我们通过在点后添加后缀{2}来告诉它匹配两个字符。

现在我们有了完整的模式:r'(..{2})'

现在,我们想使用该模式,并将其替换为其他模式。

我们使用替换模式:r'1,'

这里的1是对我们之前创建的捕获组的反向引用,它包含一个文字点,后面跟着两个字符。在我们回调匹配字符串之后,我们在它后面附加一个,

最后,我们告诉re.sub命令将line作为该命令的输入字符串。


网上有很多资源可以学习正则表达式。如果你想尝试上面的模式,我在这里为你创建了一个链接,你可以在那里更好地掌握它

如果您想用,替换每个.,请尝试以下操作:

line = '4743 i03/2064.034764 i03/2021.304745*i03/29111.854765 i03/2592.50'
output_line = line.replace(".", ",")
print(output_line)

有两个参数的.replace方法将第一个参数的每次出现都替换为第二个参数(在这种情况下,它将.替换为,(。

最新更新