如何在AutoWikiBrowser中仅对信息框应用.NET正则处理图片标签
仅移除维基信息框内的图片标签(.NET正则实现)
需求场景
需使用AutoWikiBrowser(基于.NET正则语法)处理维基代码,仅移除信息框内部的图片标签格式,保留文件名及扩展名;信息框外的图片标签不做修改。
示例原代码:
{{Infobox xyz |aaa= Xyz |bbb= [[Xyz]] |ccc=[[File:xyz.jpg|thumb|Xyz.]] |ddd= {{lang|en|xyz}} }} [[File:abc.jpg|thumb|Abc.]]
处理后目标效果:
{{Infobox xyz |aaa= Xyz |bbb= [[Xyz]] |ccc=xyz.jpg |ddd= {{lang|en|xyz}} }} [[File:abc.jpg|thumb|Abc.]]
现有问题
- 单独的图片标签移除正则
\[\[ *fi(?:le|chier) *: *([^\|]*)[^\]]*\]\]会匹配所有图片,无法区分信息框内外; - 第三方匹配信息框的正则使用了子例程语法,.NET正则不支持该写法,无法直接复用。
解决方案
利用.NET正则的平衡组特性匹配完整信息框,再结合AutoWikiBrowser的内置替换函数,仅在信息框范围内处理图片标签。
具体设置(AutoWikiBrowser正则替换)
- 查找正则:
(?s)({{Infobox(?:(?!{{Infobox)[^{}]|(?<Open>{{)|(?<-Open>}}))*?(?<=(?Open>=0))})
- 替换内容:
${string:Replace($1, '\[\[ *fi(?:le|chier) *: *([^\|]*)[^\]]*\]\]', '$1')}
原理说明
- 平衡组匹配信息框:
(?s)开启单行模式,让正则可以跨换行匹配完整信息框;(?<Open>{{)和(?<-Open>}})通过计数嵌套的{{和}},确保精准匹配从{{Infobox开头到对应闭合}}的完整模板块,支持信息框内部嵌套其他模板的场景;
- 内部替换图片标签:
通过AutoWikiBrowser的string:Replace内置函数,仅在匹配到的信息框内容($1)中,用你原有的图片标签正则替换为捕获到的文件名($1对应文件名部分)。
内容的提问来源于stack exchange,提问作者oli_vi_er
相关产品推荐
相关产品推荐

