是否可以使用"任何"来搜索和替换字符串。字符?

时间:2017-11-28 17:46:04

标签: python python-3.x file replace

可能有几种方法可以解决这个问题,因此我可以接受任何想法。

我有一个文件,在该文件中是字符串" D133330593"注意:我确实在该字符串存在的文件中有确切位置,但我不知道这是否有帮助。

在这个字符串后面有6个数字,我需要用6个其他数字替换这6个数字。

这是我到目前为止所做的:

def editfile():
    f = open(filein,'r')
    filedata = f.read()
    f.close()

    #This is the line that needs help

    newdata = filedata.replace( -TOREPLACE- ,-REPLACER-)

    #Basically what I need is something that lets me say "D133330593******" 
    #->"D133330593123456" Note: The following 6 digits don't need to be 
    #anything specific, just different from the original 6

    f = open(filein,'w')
    f.write(newdata)
    f.close()

2 个答案:

答案 0 :(得分:3)

使用re模块定义您的模式,然后使用sub()函数用您自己的字符串替换该模式的出现。

import re

...

pat = re.compile(r"D133330593\d{6}")
re.sub(pat, "D133330593abcdef", filedata)

以上将模式定义为 - 您的字符串(" D133330593")后跟六位十进制数字。然后下一行用替换字符串替换所有出现的模式(" abcdef"在这种情况下),如果这是你想要的。

如果您希望每次出现模式都有唯一的替换字符串,那么您可以在count函数中使用sub()关键字参数,该参数允许您指定替换必须的次数完成。

查看此库以获取更多信息 - https://docs.python.org/3.6/library/re.html

答案 1 :(得分:2)

让我们为string

简化您的问题
s = "zshisjD133330593090909fdjgsl"

并且您希望将6之后的"D133330593"字符替换为"123456"来生成:

"zshisjD133330594123456fdjgsl"

为实现这一目标,我们首先需要找到index的{​​{1}}。这只需使用"D133330593"

即可完成
str.index

然后替换下一个i = s.index("D133330593") 6,但为此,我们应首先计算我们要替换的characters的长度:

string

然后进行替换:

l = len("D133330593")

给了我们想要的结果:

s[:i+l] + "123456" + s[i+l+6:]

我相信您现在可以将其集成到您的代码中以处理文件,但这就是您解决问题的方法。

请注意,使用上述变量是正确的做法,因为与在旅途中计算它们相比,它是最有效的。然而,如果你的'zshisjD133330593123456fdjgsl' 时间太长(即效率不是太大的话),你可以在一行中完成上述整个过程:

file

给出相同的结果。