排除正则表达式搜索中的单词列表

Posted

技术标签:

【中文标题】排除正则表达式搜索中的单词列表【英文标题】:exclude list of words in the Regex search 【发布时间】:2017-10-01 18:32:38 【问题描述】:

root/element1/element2[@attr1='abc']/element3[attr3='xyz']/element4/element5[attr4='pqr']/element6/element7

我想清除上述 xpath 中除 attr4 之外的所有属性。预期的输出是 - root/element1/element2/element3/element4/element5[attr4='pqr']/element6/element7

你能帮忙吗?

【问题讨论】:

你的正则表达式有什么问题? 提示:定义一个正则表达式模式,它只匹配所有属性加括号,但不匹配名称为 attr4 的属性。如果您已成功定义此正则表达式,请在调用 Regex.Replace(...) 时使用它来用空字符串 ("") 替换 xpath 中所有出现的属性... 这是我匹配所有属性的正则表达式 [[^]]*] 我想知道在这个模式中包含排除列表的方法.. 如果你只想要包含 attr4 的节点,那么使用 xpath : //*[@attr4='pqr'] 你会浪费很多时间想出一个好的正则表达式,特别是在任何 xml 字符串上。 你不可能有你想象的排除列表。正则表达式模式描述了与该模式匹配的连续文本序列。 【参考方案1】:

您可以使用下面的正则表达式来匹配不包括attr4 的所有属性。那么你可以直接使用Regex.Replace()来摆脱这些。

(\[((?!attr4)[^\]])*\])

Regex Demo

代码:

string input = "root/element1/element2[@attr1='abc']/element3[attr3='xyz']/element4/element5[attr4='pqr']/element6/element7";
Regex regex = new Regex(@"(\[((?!attr4)[^\]])*\])");
var output = regex.Replace(input, "");

输出:

root/element1/element2/element3/element4/element5[attr4='pqr']/element6/element7

Dotnet Fiddle

【讨论】:

而不是一遍又一遍地创建一个新的正则表达式,我需要一个帮助来使它用参数编译正则表达式,然后在运行时动态地将值传递给参数(attr4 在运行时传递) -时间。

以上是关于排除正则表达式搜索中的单词列表的主要内容,如果未能解决你的问题,请参考以下文章

需要 c# 正则表达式将逗号列表中的任何单词与另一个字符串中的任何单词匹配

如何使用正则表达式排除单词?

django 在列表中使用正则表达式排除 url

正则表达式匹配两个单词之一

正则表达式查找单词的最佳匹配子集

Python - 用正则表达式模式替换 DataFrame 中列表中的单词