繁体   English   中英

Python + Regex +用该模式的多个副本替换模式

[英]Python + Regex + Replace pattern with multiple copies of that pattern

我必须从用户处获取一个字符串并将其格式化,以便某些命令行使用情况可以接受。 基本上,我需要用两个反斜杠替换双引号(“)之前的所有反斜杠。我可以使用此正则表达式找到该模式:

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"'意思是“第一个捕获组的两个副本后跟一个双引号”(在这种情况下,只有一个捕获组,但是可以有更多个)。替换字符串具有双引号是因为匹配项带有双引号;由于整个匹配项都由替换字符串替代,因此,如果替换字符串没有双引号,则将删除双引号。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM