python - 为re.sub替换参数转义Python正则表达式字符串?
问题描述
使用re
模块可以对替换模式使用转义。例如:
def my_replace(string, src, dst):
import re
return re.sub(re.escape(src), dst, string)
虽然这在大多数情况下都有效,但dst
字符串可能包括"\\9"
例如。
这会导致一个问题:
\\1
,\\2
... 等dst
,文字将被解释为组。- 使用要更改为的
re.escape(dst)
原因。.
\.
有没有办法在不引入多余字符转义的情况下转义目的地?
示例用法:
>>> 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
例如忽略大小写的能力。
解决方案
在这种情况下,只有反斜杠被解释为特殊字符,因此re.escape
您可以在目标参数中使用简单的替换来代替 。
def my_replace(string, src, dst):
import re
return re.sub(re.escape(src), dst.replace(r"\", r"\\"), string)
推荐阅读
- javascript - 通过 Javascript 从 Nav2015 消费 OData - 身份验证失败
- php - PHP(Laravel) 存储类对象
- java - 如何在基于 Spring 会话 Java 的配置中更改 MaxInactiveIntervalInSeconds 值?
- ruby-on-rails - Microsoft Graph API 身份验证 - 范围无效
- javascript - Angular - 无法读取未定义的属性“id”
- python - 在 Python 中生成 Outlook 提及 @
- spring - Shared ApllicationContext 抛出 BeanFactory 未初始化或已关闭
- php - 如何自动播放嵌入谷歌驱动器视频?
- java - 登录系统 JSF - 识别出 SQLException?
- jenkins - Jenkins 环境变量 - 检测拉取请求