微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决反向引用,但不与查找结果匹配

考虑文本结构

 (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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?