【问题标题】:C# Regex - Equivalent for "\g" in regex101.com?C# 正则表达式 - 相当于 regex101.com 中的“\g”?
【发布时间】:2017-11-21 08:04:50
【问题描述】:

我打算使用我在 regex101.com 上构建的正则表达式到 C# 应用程序中的正则表达式:

((?'d'(?:3[0-9]\s+)){2})2f\s+(\g'd'{2})2f\s+(\g'd'{4})

问题是 C# 抱怨:

Unrecognized escape sequence \g.

C# 正则表达式中“\g”的等效语法是什么?或者我打算使用的正则表达式有更好的替代方案吗?

正则表达式101的链接:https://regex101.com/r/CP4ZS0/1

【问题讨论】:

  • .net 正则表达式不支持递归。但在这种情况下,您可以简单地推出完整的模式,用递归模式替换递归。
  • 只需重复子模式。 .NET 正则表达式不支持\g'n' 递归构造。
  • @SebastianProske 你想发布答案吗?
  • @SebastianProske,Wiktor Stribiżew - 非常感谢,我只需要用它自己的模式替换命名组。它现在可以工作了。
  • @slimjourney 您可以动态构建模式。 var p = @"(?:3[0-9]\s+)";,然后是 var rx=$@"{p}{{2}}2f\s+{p}{{2}}2f\s+{p}{{4}}";。也就是说,如果您需要使代码更短。不过,这和塞巴斯蒂安的建议是一样的。

标签: c# regex


【解决方案1】:

.net RegEx 不支持递归。只需在使用递归的地方应用递归模式,例如

(?:3[0-9]\s+){2}2f\s+(?:3[0-9]\s+){2}2f\s+(?:3[0-9]\s+){4}

我已删除所有捕获组,您可能需要在需要的地方重新应用它们。

https://regex101.com/r/CP4ZS0/2

【讨论】:

猜你喜欢
  • 2017-01-30
相关资源
最近更新 更多