Python 正则表达式只需要添加第二个反斜杠

Python Regex Expression Needed to Add Only a 2nd Backslash

我有一个在 sed 中有效的表达式,需要为 python 采用它。我想在每个“单个”反斜杠旁边插入一个反斜杠。为清楚起见,我将单独的反斜杠替换为“X”。这是在 sed 中有效的方法。请记住,sed 实际上将输入视为 aaa\bbb\ccc。我希望输出为“aaa\bbb\ccc”。

echo "aaa\bbb\\ccc" | sed -e 's/\([^\]\)\\([^\]\)/X/'

我尝试了一些方法,例如:

re.sub("([^\])\([^\])", "X", r"1236\789")
r"1236\789".replace(r"([^\])\([^\])", "X")

对您传递给 re.sub 的其他参数也使用 r 表示法——这样字符串就可以 as-is (所有反斜杠)传递给正则表达式引擎(也使用反斜杠转义)。

所以:

s = re.sub(r"([^\])\([^\])", r"X", r"1236\789")

或者,将 X 替换为两个反斜杠:

s = re.sub(r"([^\])\([^\])", r"\\", r"1236\789")

在边界情况下,此正则表达式无法正常工作(如果我正确理解您的目的):当单独的反斜杠是字符串中的第一个或最后一个字符时,它不会加倍.如果您需要这样做,请使用 look-around:

s = re.sub(r"(?<!\)\(?!\)", r"\\", r"1236\789")

蛮力,我想通了。我需要再看一下才能找出原因。

re.sub(r"([^\])\([^\])", r"x", r"aaa\bbb\ccc")