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

问题描述

考虑文本结构

 (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

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...