这里没有。。。我正在学习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
方法将第一个参数的每次出现都替换为第二个参数(在这种情况下,它将.
替换为,
(。