regex执行非连续查找和替换

regex执行非连续查找和替换,regex,Regex,通常,我会遇到这样的情况:我想找到并替换一根绳子的两边,而让中间部分完好无损。通常,第一部分很容易识别,但第二部分太常见了。以下是一个例子: 要将代码字符串ActiveDocument.Sections[“SectionName”]更改为SectionName,很容易找到第一部分,但后一部分“]与ActiveDocument.Sections[”没有关系,太常见了。显然,如果SectionName是一个静态字符串,这无关紧要,我可以找到整个代码字符串(包括)来替换 是否有一种方法可以匹配两边,跳

通常,我会遇到这样的情况:我想找到并替换一根绳子的两边,而让中间部分完好无损。通常,第一部分很容易识别,但第二部分太常见了。以下是一个例子:

要将代码字符串
ActiveDocument.Sections[“SectionName”]
更改为
SectionName
,很容易找到第一部分,但后一部分
“]
ActiveDocument.Sections[”没有关系,太常见了
。显然,如果
SectionName
是一个静态字符串,这无关紧要,我可以找到整个代码字符串(包括)来替换

是否有一种方法可以匹配两边,跳过中间部分,或者正则表达式只能找到连续的部分?或者有一种方法可以通过将
*?
找到的内容临时存储在表达式中来实现

我正在使用UltraEdit进行查找/替换操作。我还可以使用Javascript将代码作为字符串执行,即:
codestring.replace()

*\[“(.*?”\])
在Python中为我工作

import re
re.match(r'.*\["(.*?)"\]', 'ActiveDocument.Sections["SectionName"]').group(1)
'SectionName'

基于,它似乎也可以与Javascript一起工作。

这取决于您使用的工具,但在Javascript中,您可以使用
$1
返回第一个捕获组

因此,您可以使用模式
ActiveDocument.Sections\[“(.*?”\]
表示“查找”,而
$1
表示“替换”


我在

*
上用javascript正则表达式工具测试了这一点,它是creedy,将匹配到最后一个
“]
在整个文档中。使用惰性的
*?
。很抱歉,我花了这么长时间来测试这个问题,并将您的答案标记为。非常感谢您的回复;这将使我的生活从此变得更轻松。我的模式是
ActiveDocument\.节\[\“仪表板\]”节\[\\\\\\.[\]\(*?“\]
不知道你的工作原理…既然你没有逃过第一个点,那不是应该将$1改为“.”并使我在你的例子中所寻找的$2变为“.”吗?我想我已经弄明白了…周围的parethes
*?
似乎起到了作用。@EdwardD Parethes默认表示“捕获组,“这相当于1美元。如果你有不止一组括号,它们将填充$2、$3等。在UltraEdit中,我不得不将正则表达式类型更改为Perl以使用Jay的答案。我一直在研究我的声誉问题,不仅是怀旧之旅,还想看看是否可以添加细节来修复我的代表。我发现了这个宝石。我不得不说,这个问题和杰伊给出的答案确实改变了我的生活。一旦我能够保留间隙信息,我对正则表达式的使用就成倍增加。不仅如此,我还能够转化其他仍在寻找创造性方法使用Windows查找/替换的人。