gpt4 book ai didi

Python + 正则表达式 + 将模式替换为该模式的多个副本

转载 作者:太空宇宙 更新时间:2023-11-03 17:27:47 24 4
gpt4 key购买 nike

我必须从用户那里获取一个字符串并对其进行格式化,以便它对于某些命令行消耗来说是可以接受的。基本上,我需要用两个反斜杠替换双引号 (") 之前的所有反斜杠。我可以使用此正则表达式找到模式:

import re

pattern = '\\\\+"'
string = "\\\\\\\" asdf \\\" \\ \\ \\\\\""

print string, "\n"
matches = re.findall(pattern, string)

但是现在我有了这些匹配项,如何用它们自身的双副本替换它们?因此,引号前面的 3 个反斜杠必须变为 6,第 1 个斜杠变为 2,2 个变为 4。不在引号前面的斜杠保持相同的长度。

对此的任何建议将不胜感激。

谢谢。

最佳答案

您应该使用单引号、原始字符串和re.sub:

string = r'\\\" asdf \" \ \ \\"'
new_string = re.sub(r'(\\+)"', r'\1\1"', string)
print(new_string)

输出:

\\\\\\" asdf \\" \ \ \\\\"
<小时/>

模式

为了解释这个模式,首先我们删除括号;它们不会影响匹配的内容,我们稍后会将它们放回去。模式 r'\\+"' 表示“一个或多个反斜杠后跟一个双引号”。即使它是一个原始字符串,我们仍然必须转义反斜杠,因为反斜杠在正则表达式;这就是为什么它是 r'\\+"' 而不是 r'\+"'

括号

实际模式中 \\+ 周围的括号仅表示“捕获这些括号内的匹配部分”。这会将本次匹配中所有反斜杠的子字符串放入捕获组中。我们将在替换字符串中使用此捕获组。

替换字符串

替换字符串 r'\1\1"' 只是表示“第一个捕获组的两个副本,后跟双引号”(在本例中只有一个捕获组,但可以有更多).替换字符串有双引号的原因是因为匹配有双引号;因为整个匹配都被替换字符串替换,如果替换字符串没有双引号,双引号将被删除。

关于Python + 正则表达式 + 将模式替换为该模式的多个副本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32321768/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com