0

这是我的情况:

re.sub(r'([^\\])', r'\1[\W\1]*', string)

我想在 (itself) 之后附加 [\W(itself)] 是很简单的,因为它自己是一组字符(可以是特殊的)。这就是为什么我需要将它放在一个集合中以去除所有特殊含义。但是,我的组可以是一个 SET。我知道嵌套集不起作用。如何转义/删除方括号以安全地将我的组放入集合中?

我的另一个尝试是改用 \1(\W|\1)* ,但我需要转义组中的字符而不转义组中可能的方括号。我该怎么做?

这是一个两难的选择。我不知道如何解决这个问题以及该走哪条路。请帮忙。

非常感谢你。

编辑:我跳过了一步。在匹配一个字符但 \([^\] 部分)并用解释的表达式替换后,我有时需要用一组相似的字符替换它。所以,'a' 变成了 '[a@]','s' 变成了 '[s5$]',等等......这个问题真的是错误的。但是我解决了这个问题,所以如果你仍然试图从我之前写的东西中理解,请不要:)

4

1 回答 1

2

您可以使用函数作为re.sub. re.escape这将允许您在执行替换之前调用您的匹配项:

def escape_repl(match):
    return '{0}[\W{0}]*'.format(re.escape(match.group(1)))

re.sub(r'([^\\])', escape_repl, string)

例子:

>>> print re.sub(r'([^\\])', escape_repl, '[^$]')
\[[\W\[]*\^[\W\^]*\$[\W\$]*\][\W\]]*

我认为这就是你想要做的,但你的问题有点不清楚。如果这不是您想要的,请提供一些示例字符串和预期结果。

于 2012-08-16T20:07:05.573 回答