【问题标题】:Combine Regular Expressions #2组合正则表达式 #2
【发布时间】:2016-03-21 15:22:58
【问题描述】:

请帮助如何组合以下两个正则表达式

a)@"(?<=\.Value\[)(.*)(?=\])"

上面的正则表达式在.Value之后取出一个子字符串,并从子字符串中截断'['和']'括号。

b)@"[^\{*\}*$]+"

从上述子字符串的开头和结尾删除所有“{”和“}”大括号。子字符串可以有零个或多个 '{' 和 '}' 字符。

例如

{{server/Y2KCluster1:[]ServerServerStatusState}}.Value[{{{server/Y2KCluster2:[]ServerServerStatusSecondsTillShutdown}}}]

应用第一个正则表达式后,它返回为

[{{{server/Y2KCluster2:[]ServerServerStatusSecondsTillShutdown}}}]

应用第二个正则表达式后返回为

服务器/Y2KCluster2:[]ServerServerStatusSecondsTillShutdown

【问题讨论】:

  • 请提供一些您正在使用的示例输入以及您的期望。
  • 也许这个 SO post 会有所帮助
  • {{server/Y2KCluster1:[]ServerServerStatusState}}.Value[{{{server/Y2KCluster2:[]ServerServerStatus SecondsTillShutdown}}}] 在应用第一个正则表达式之后,它返回为 [{{{server/Y2KCluster2:[]ServerServerStatusSecondsTillShutdown}}}] 在应用第二个正则表达式之后它返回返回 server/Y2KCluster2:[]ServerServerStatusSecondsTillShutdown
  • 编辑您的问题@ShibuVeerapallil,而不是作为评论发布
  • 谢谢。我更新了问题。

标签: c# regex


【解决方案1】:

下面的正则表达式

(?<=\.Value\[)(?:{*)([^}]+)(?=[\]}])

  • 找到.Value[之后的子串
  • 并贪婪匹配任意数量的{字符
  • 贪婪匹配} 字符之前的所有内容 - 在第 1 组中返回
  • }] 字符之前结束

演示:https://regex101.com/r/mA7pH2/1

【讨论】:

  • 感谢您的回复。我尝试了您的解决方案,它返回为code {{{{server/S2KCluster2:[]ServerServerStatusSecondsTillShutdown}。
  • @Shibu 查看table tab at regexstorm 并看到您想要的结果已正确捕获在 $1 aka 组 1 中,正如我在回答中提到的那样,如 regex101 所示
  • 感谢它现在的工作。以前我没有提取价值 1 美元。现在我将 $1 值提取为 .Groups[1].value。谢谢你的回答。
  • 感谢基思霍尔。
【解决方案2】:

这个正则表达式:

\.Value\[\{*((?:\[[^\]]*\]|.)*?)}*\]

查找与值属性的匹配项。然后匹配一个[,后跟任意数量的{然后,这就是工作在捕获组中完成的地方 - 获取任何

  • \[[^\]]*\] - [ 后跟直到 ] 的任何内容(匹配括号 - 在您的示例中只是 []

  • .任意字符

重复这个非贪婪,直到任意数量的},然后是]

结果被捕获在第 1 组中。

问候

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-29
    相关资源
    最近更新 更多