带变量字符串regex的条件删除
我已经搜索了许多Q&a,但找不到足够具体的解决方案来提供帮助 我有一个很大的xml文件,需要根据另一个字段中的值在一个字段中执行有条件的“删除” 例如:带变量字符串regex的条件删除,regex,textpad,Regex,Textpad,我已经搜索了许多Q&a,但找不到足够具体的解决方案来提供帮助 我有一个很大的xml文件,需要根据另一个字段中的值在一个字段中执行有条件的“删除” 例如: <vehicle>...<manufacturer>JCB</manufacturer>....<item_category>JCB Tractors</item_category>...</vehicle><vehicle>...<manufacture
<vehicle>...<manufacturer>JCB</manufacturer>....<item_category>JCB Tractors</item_category>...</vehicle><vehicle>...<manufacturer>Caterpillar</manufacturer>....<item_category>Digger</item_category>...</vehicle><vehicle>...<manufacturer>Caterpillar</manufacturer>....<item_category>Caterpillar Digger</item_category>...</vehicle>
…JCB…JCB拖拉机…Caterpillar…挖掘机…Caterpillar…挖掘机。。。
需要成为
<vehicle>...<manufacturer>JCB</manufacturer>...<item_category>Tractors</item_category>...</vehicle><vehicle>...<manufacturer>Caterpillar</manufacturer>...<item_category>Digger</item_category>...</vehicle><vehicle>...<manufacturer>Caterpillar</manufacturer>....<item_category>Digger</item_category>...</vehicle>
…JCB…拖拉机……履带……挖掘机……履带……挖掘机。。。
理想情况下,我可以使用textpad中的查找和替换功能将解决方案设置为POSIX扩展正则表达式
真的很感谢你在这个问题上的帮助,因为我已经撞了我的头一段时间了
如果我使用解析器,我可以使用
(?<=<manufacturer>)(.*?)(?=<\/manufacturer>)
(?使用解析器的建议非常恰当
处理regex中的标记可能是一场噩梦。一些程序在大型文本文件中的regex模式下失败,并开始损坏位。请确保首先备份您的工作
但我同时看到了一个机会,可以从中获得一些乐趣。这只是因为制造商名称与商品类别的第一部分相同
演示:
解释
(\<manufacturer>([^<]*)<\/manufacturer>)(\s*)(\<item_category>)(?:\2\s*)?([^<]*)(<\/item_category>)
(\([^
)#关闭CG6
将演示中相当于两个标记之间的空格的(\s*)
,更改为([\s\s]*?)
应该处理你的问题没有提供的所有标签,但是要求每个车辆标签都有一个制造商和项目类别标签。如果没有,你最终会得到损坏的数据,这就是为什么解析器是更好的解决方案的一个原因。我的建议是使用XML解析器而不是regex。你能请解释更多您想要实现的目标。谢谢回复-我正在努力保持较大的容量(1GB)xml文件完好无损,并修复偶尔使用制造商字符串和类别填充的“损坏”类别字段。不过您的示例不清楚。您好-我已经调整了示例。我刚刚显示了相关字段,“点”表示记录中的许多其他字段。非常感谢。我的XML没有嵌套,字段顺序一致且始终存在,因此这种方法应该可以。我可以让正则表达式在诸如textpad之类的工具中很好地工作,但是在textpad中它似乎不起作用。分解正则表达式以查看(\([^
(\<manufacturer>([^<]*)<\/manufacturer>)(\s*)(\<item_category>)(?:\2\s*)?([^<]*)(<\/item_category>)
( # Opens CG1
\<manufacturer> # Literal
( # Opens CG2
[^<]* # Negated Character class (excludes the characters within)
# None of: <
# * repeats zero or more times
) # Closes CG2
< # Literal <
\/ # Literal /
manufacturer # Literal manufacturer
> # Literal >
) # Closes CG1
( # Opens CG3
\s* # Token: \s (white space)
# * repeats zero or more times
) # Closes CG3
( # Opens CG4
\<item_category> # Literal
) # Closes CG4
(?: # Opens NCG
\2 # A backreference to CG2
\s* # Token: \s (white space)
# * repeats zero or more times
)? # Closes NCG
# ? repeats zero or one times
( # Opens CG5
[^<]* # Negated Character class (excludes the characters within)
# None of: <
# * repeats zero or more times
) # Closes CG5
( # Opens CG6
< # Literal <
\/ # Literal /
item_category # Literal item_category
> # Literal >
) # Closes CG6