反向引用,但不与查找结果匹配

问题描述

考虑文本结构

 (Title)[#1Title-link]
      (Chapter1)[#Chapter1-link]
      (Chapter2)[#Chapter2-link]
      (Chapter3)[#Chapter3-link]

我如何反向引用[#Title-link]而又不与查找结果匹配。我正在尝试改变

      (Chapter1)[#Chapter1-link] => (Chapter1)[#1Title-link-Chapter1-link]
      (Chapter2)[#Chapter2-link] => (Chapter2)[#1Title-link-Chapter2-link]
      (Chapter3)[#Chapter3-link] => (Chapter3)[#1Title-link-Chapter3-link]

我尝试使用并找到

(\(Title\)\[(.*?)])([\s\S]*?\[)#(\D.*?\])

然后将其替换为

$1$3$2-$4

但是这里的问题是每次发现仅突出显示一次,我在很多章中都发现效率太低,无法一一替换。 保持常量标题也不是一件好事,因为我有多个具有相同结构的文件

在正则表达式中可能吗?欢迎任何解决方案或替代方案。

解决方法

您可以首先进行搜索以获取正确的替换字符串,然后使用该替换字符串进行后续替换操作。您没有指定使用的语言,所以这是Python中的代码(对组1的反向引用是\1,而不是更常见的$1):

import re

text = """(Title)[#1Title-link]
      (Chapter1)[#Chapter1-link]
      (Chapter2)[#Chapter2-link]
      (Chapter3)[#Chapter3-link]"""

m = re.search(r'(?:\(Title\)\[#([^\]]*)\])',text)
assert(m) # that we have a match
substitution = m.group(1)
text = re.sub(r'\[#Chapter([^\]]*)\]',r'[#' + substitution + r'-Chapter\1' + ']',text)
print(text)

打印:

(Title)[#1Title-link]
      (Chapter1)[#1Title-link-Chapter1-link]
      (Chapter2)[#1Title-link-Chapter2-link]
      (Chapter3)[#1Title-link-Chapter3-link]

See Regex Demo 1 for getting the substitution string

See Regex Demo 2 for making the subsitutions