如何用AutoWikiBrowser和.NET正则删除指定命名引用及其调用
.NET正则表达式实现删除含特定文本的维基百科命名引用及所有调用
核心思路
要实现目标,需分两步处理:
- 先捕获所有包含目标文本(比如
ABC)的主引用名称 - 再删除所有对应名称的主引用和复用引用
.NET正则支持后向引用和多次替换,可以通过两次替换完成需求,也可使用一次性匹配的复杂正则。
第一步:捕获目标引用名称(可选,用于验证)
若需先确认要删除的引用名称,用以下正则匹配所有含ABC的主引用:
<ref name="([^"]+)">[^<]*ABC[^<]*</ref>
- 捕获组
$1会提取出引用名称(如foo、baz)
第二步:批量删除目标引用及其所有调用
方式一:分两次替换(AutoWikiBrowser友好)
替换1:删除含ABC的主引用
查找正则:
<ref name="([^"]+)">[^<]*ABC[^<]*</ref>
替换为空字符串,这一步会清除所有包含目标文本的主引用。
替换2:删除对应名称的复用引用
将第一步捕获到的名称(如foo、baz)用|拼接,作为正则匹配项:
<ref name="(foo|baz)"/>
替换为空字符串,即可清除所有对应名称的复用引用。
方式二:一次性匹配替换
利用.NET正则的回溯特性,用以下正则一次性匹配并删除所有目标引用及其调用:
<ref name="([^"]+)"(?:>[^<]*ABC[^<]*</ref>|/>)|<ref name="\1"/>
替换为空字符串,该正则会匹配两种内容:
- 包含
ABC的主引用(<ref name="name">ABC...</ref>) - 对应名称的复用引用(
<ref name="name"/>)
测试验证
针对测试字符串:
Foo<ref name="foo">ABC</ref>ABC, foo bar<ref name="bar">XYZ</ref>, baz<ref name="baz"/>, qux<ref name="foo"/>, quux<ref name="bar"/><ref name="baz">ABC</ref>.
使用上述正则替换后,结果为:FooABC, foo bar<ref name="bar">XYZ</ref>, baz, qux, quux<ref name="bar"/>.
完全符合需求,保留了不含ABC的bar引用及其调用。
注意事项
- 确保AutoWikiBrowser启用了.NET正则模式(默认开启)
- 若目标文本含特殊正则字符(如
.、*),需用反斜杠转义,例如ABC\.com - 若引用内容包含
<标签,可将[^<]*替换为[\s\S]*?(非贪婪模式)匹配任意内容,避免遗漏:<ref name="([^"]+)">[\s\S]*?ABC[\s\S]*?</ref>
内容的提问来源于stack exchange,提问作者oli_vi_er
相关产品推荐
相关产品推荐

