是否可以搜索字符串并将其替换为"any"字符?



可能有几种解决此问题的方法,因此我对任何想法都开放。

我有一个文件,该文件中的是字符串" 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()

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

import re
...
pat = re.compile(r"D133330593d{6}")
re.sub(pat, "D133330593abcdef", filedata)

上面的模式定义为 - 您的字符串(" D13330593"),然后是六个小数位数。然后,下一行替换了替换字符串(在这种情况下为" abcdef"),如果您想要的话。

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

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

让我们简化您的问题,让您拥有string

s = "zshisjD133330593090909fdjgsl"

您想用"123456"替换"D133330593"之后的6字符以生产:

"zshisjD133330594123456fdjgsl"

为了实现这一目标,我们首先需要找到"D133330593"index。这是通过仅使用str.index

完成的
i = s.index("D133330593")

然后替换下一个6 characters,但为此,我们应该首先计算要替换的string的长度:

l = len("D133330593")

然后进行替换:

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

为我们提供了以下理想的结果:

'zshisjD133330593123456fdjgsl'

我确定您现在可以将其集成到代码中以使用文件,但这就是您可以做问题的核心。


请注意,在上面使用上述变量是正确的事情,因为它比在旅途中计算它们是最有效的。但是,如果您的file不太长(即效率不是太多),则可以在一行中完成上面概述的整个过程:

s[:s.index("D133330593")+len("D133330593")] + "123456" + s[s.index("D133330593")+len("D133330593")+6:]

给出相同结果。

最新更新