如何解决反向引用,但不与查找结果匹配
考虑文本结构
(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]
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。