排除正则表达式搜索中的单词列表
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 在运行时传递) -时间。以上是关于排除正则表达式搜索中的单词列表的主要内容,如果未能解决你的问题,请参考以下文章