Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/315.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
替换Python中的前导文本_Python_String - Fatal编程技术网

替换Python中的前导文本

替换Python中的前导文本,python,string,Python,String,我使用Python2.6,我想用另一个字符或字符串替换字符串中某些前导字符(、\ucode>和$)的每个实例。因为在我的例子中,替换字符串是相同的,所以我得出以下结论: def replaceLeadingCharacters(string, old, new = ''): t = string.lstrip(old) return new * (len(string) - len(t)) + t def replaceLeadingString(string, old, n

我使用Python2.6,我想用另一个字符或字符串替换字符串中某些前导字符(
\ucode>和
$
)的每个实例。因为在我的例子中,替换字符串是相同的,所以我得出以下结论:

def replaceLeadingCharacters(string, old, new = ''):
    t = string.lstrip(old)

    return new * (len(string) - len(t)) + t
def replaceLeadingString(string, old, new = ''):
    n = 0
    o = 0
    s = len(old)

    while string.startswith(old, o):
        n += 1
        o += s

    return new * n + string[o:]
这似乎很管用:

>>> replaceLeadingCharacters('._.!$XXX$._', '._$', 'Y')
'YYY!$XXX$._'
  • 有没有更好(更简单或更有效)的方法在Python中实现相同的效果

  • 有没有办法用字符串而不是字符来达到这种效果?类似str.replace()的东西,在输入字符串中出现与要替换的字符串不同的内容时停止?现在我想到了这个:

    def replaceLeadingCharacters(string, old, new = ''):
        t = string.lstrip(old)
    
        return new * (len(string) - len(t)) + t
    
    def replaceLeadingString(string, old, new = ''):
        n = 0
        o = 0
        s = len(old)
    
        while string.startswith(old, o):
            n += 1
            o += s
    
        return new * n + string[o:]
    
    我希望有一种不用显式循环就能做到这一点的方法

编辑:

使用
re
模块有很多答案。我有几个问题:

  • 当使用
    str
    方法替代它们时,它不是比它们慢很多吗

  • 有没有一种简单的方法可以正确地引用/转义将在正则表达式中使用的字符串?例如,如果我想对
    replaceLeadingCharacters
    使用
    re
    ,我如何确保
    old
    变量的内容不会把
    ^[old]+
    中的事情搞砸?我希望有一个“黑匣子”功能,它不需要用户注意他们提供的字符列表


但是我认为您的第一个解决方案足够好。

您的
replaceLeadingCharacters()

下面是使用模块的
replaceLeadinString()
实现(没有
while
循环):

当使用str方法替代它们时,它不是比str方法慢很多吗

别猜了。测量它的预期输入

有没有一种简单的方法可以正确地引用/转义将在正则表达式中使用的字符串


这是一个有趣的替代方案,尽管
timeit
表示,对于短字符串,基于
str
的版本要慢得多。但是,随着输入字符串的增长,它会变得更快,因此它可能会赶上更大的字符串。很好,很有用!我完全错过了
re
文档中的
re.escape()
+1嗯,在我的系统
timeit
上说,对于任何大于50个字符的字符串,你的
lreplace()
函数都比我的快得多。非常好@thkala:如果您粘贴代码(例如,粘贴在此处或作为答案),我可以在我的机器上进行测试。@J.F.塞巴斯蒂安:我将我的问题中的
replaceLeadingString()
函数与之进行了比较-我还没有想出更好的方法。@thkala:我的意思是您期望的输入数据是什么:字符串长度分布,“输入字符串以旧值开始的次数”分布(或仅为平均值)。例如,对于短字符串
replaceLeadingString()
lreplace()快
8倍