【问题标题】: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 字符串上。
  • 你不可能有你想象的排除列表。正则表达式模式描述了与该模式匹配的连续文本序列。

标签: c# regex regex-negation regex-lookarounds regex-group


【解决方案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 在运行时传递) -时间。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-01-25
  • 2012-06-26
  • 2016-05-09
  • 2019-04-30
  • 2013-02-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多