你的解决方案是什么?您是否尝试过使用这样的正则表达式:
Text from-expression<File (.*)exclude="true"
可以尽可能频繁.*
地表达任何字符
另一种解决方案是使用外部转换。
我写了这样的小红宝石脚本:
File.open(ARGV.last, "w"){|f|
f.write(File.read( ARGV.first).gsub( %r{<(.+?)\s[^>]+exclude="true".*?>(.*?)</\1>}m, ""))
}
它将第一个参数作为源文件名,并将转换后的 xml 写入目标文件。
此脚本可用作转换工具:
这个比较:
变成
而不是脚本,我也成功地使用了一个班轮
ruby -e "File.open('%t', 'w'){|f| f.write(File.read('%s').gsub( /]+exclude=.true.. ?>(. ?)</File>/m, ''))}"
如果您将脚本调整为
File.open(ARGV.last, "w"){|f|
f.write(File.read( ARGV.first).gsub( %r{(<(.+?)\s[^>]+exclude="true".*?>(.*?)</\2>)}m, "<!--\n\\1\n-->"))
}
排除的部分不会被删除,而是设置为注释 ( <!-- ... -->
),您会得到:
差异现在是一个不重要的差异(蓝色而不是红色),您可以忽略此差异。
备注: * 如果你想使用我的脚本你需要 ruby。* 如果需要,您可以用另一种语言编写转换脚本。* 我使用的正则表达式没有经过很好的测试。嵌套标签可能有问题。