首页 > 解决方案 > 为re.sub替换参数转义Python正则表达式字符串?

问题描述

使用re模块可以对替换模式使用转义。例如:

def my_replace(string, src, dst):
    import re
    return re.sub(re.escape(src), dst, string)

虽然这在大多数情况下都有效,但dst字符串可能包括"\\9"例如。

这会导致一个问题:

有没有办法在不引入多余字符转义的情况下转义目的地?


示例用法:

>>> my_replace("My Foo", "Foo", "Bar")
'My Bar'

到目前为止,一切都很好。


>>> my_replace("My Foo", "Foo", "Bar\\Baz")
...
re.error: bad escape \B at position 3

这试图解释\B为具有特殊含义。


>>> my_replace("My Foo", "Foo", re.escape("Bar\\Baz"))
'My Bar\\Baz'

作品!


>>> my_replace("My Foo", "Foo", re.escape("Bar\\Baz."))
'My Bar\\Baz\\.'

.我们不想这样时,它会被逃脱。


虽然在这种情况下str.replace可以使用,但关于目标字符串的问题仍然很有用,因为有时我们可能想要使用其他功能,re.sub例如忽略大小写的能力。

标签: pythonregexregexp-replace

解决方案


在这种情况下,只有反斜杠被解释为特殊字符,因此re.escape您可以在目标参数中使用简单的替换来代替 。

def my_replace(string, src, dst):
    import re
    return re.sub(re.escape(src), dst.replace(r"\", r"\\"), string)

推荐阅读