2017-07-31 87 views
0

我试图替换文件中的字符串,即版本号4.0.0至5.0.0。但是,使用替换方法时,24.0.0等版本也会发生更改,这是不可取的。Python中的高级字符串替换

例如:我希望4.0.0在整个文件中更改为5.0.0。但是,24.0.0应该保持原样。

我写为简单的字符串替换的代码[fo是我在这里的文件]:

fo = open ('ex.txt', 'r') 
for line in fo: 
    print(line.replace('4.0.0', '5.0.0')) 

样品输入:

This is a file 
It contains a version number 
That version number is 24.0.0 
Ideally, it should remain 4.0.0 
But 4.0.0 should get changed 

所需的输出是

This is a file 
It contains a version number 
That version number is 24.0.0 
Ideally, it should remain 5.0.0 
But 5.0.0 should get changed 

第二重新给出的解决方案工作正常24.0.0。但4.0.0.15正在变为5.0.0.15,那是不可取的

print(re.sub(r'\ b4.0.0 [^。'','5.0.0',line))),但它用5.0.0代替4,0.0。那也不可取。

请帮忙。

+0

请提供您编写的代码。这样社区可以更好地帮助你。 – TheChetan

+0

你能提供代码和字符串的一部分吗? – Mohamed

+0

使用[字界](http://www.regular-expressions.info/wordboundaries.html) – ggupta

回答

0

尝试使用正则表达式:

import re 

test = "This is a file It contains a version number That version number is 24.0.0 Ideally, it should remain 4.0.0 But 4.0.0 should get changed" 

print(re.sub(r'\b4.0.0', '5.0.0',test)) 

输出:

This is a file It contains a version number That version number is 24.0.0 Ideally, it should remain 5.0.0 But 5.0.0 should get changed 

不匹配4.0.0.15,使用此:

print(re.sub(r'\b4.0.0[^.]', '5.0.0 ', test)) 

的解释:

我们使用re模块,它是提供正则表达式匹配的python模块。

re.sub(pattern, repl, string):返回通过用替换repl替换字符串中最左边不重叠出现的模式而获得的字符串。

pattern我们使用的是\b4.0.0[^.]

这部分\b4.0.0匹配任何变成空串后的4.0.0。但也匹配4.0.0.15。所以为了阻止这种情况发生,我们使用[^.],它匹配除.之外的任何字符,因此它不再与4.0.0.15匹配。

+0

它不起作用。 24.0.0保持原样,但4.0.0没有变为5.0.0 –

+0

然后试试这个: print(line.replace(r'\ b4.0.0','5.0.0')) – Mohamed

+0

if这没有奏效,那么你应该至少提供一部分文字 – Mohamed

0

只是为了澄清,正则表达式是一个强大的工具,我建议不要使用它们进行日常字符串替换。

如果你知道一个事实,即4.0.0之前还有一个空间,你可以只使用

line.replace(' 4.0.0 ' , ' 5.0.0 ') 

(空格之后是免除了更换4.0.0.5

如果你不知道由于4.0.0之前有空格,所以正则表达式模式需要比穆罕默德的答案更复杂。