【问题标题】:Passing a dynamic value to quantifier in C# regex在 C# 正则表达式中将动态值传递给量词
【发布时间】:2016-07-09 04:12:52
【问题描述】:

我有一个正则表达式,我试图将一个变量传递给:

int i = 0;  
Match match = Regex.Match(strFile, "(^.{i})|(godness\\w+)(?<=\\2(\\d+).*?\\2)(\\d+)");

我希望正则表达式引擎将 {i} 解析为 i 变量保存的数字。

我这样做的方式不起作用,因为当文本包含匹配的子字符串时,我没有得到匹配项。

【问题讨论】:

  • 你想达到什么目的?
  • 我需要在正则表达式命令中插入一个变量
  • 不使用字符串插值
  • 你为什么不试试串联?
  • 看起来像 this question 的副本。

标签: c# regex replace


【解决方案1】:

不清楚你想用你的正则表达式匹配什么字符串,但如果你需要在模式中使用一个变量,你可以很容易地在verbatim string literal 中使用string interpolation。在声明正则表达式模式时,最好使用逐字字符串文字以避免过度转义。

由于字符串插值仅在 C#6.0 中引入,您可以使用string.Format

string.Format(@"(^.{{{0}}})|(godness\w+)(?<=\2(\d+).*?\2)(\d+)", i)

否则,从 C#6.0 开始,这似乎是一个更好的选择:

int i = 0;
Match match = Regex.Match(strFile, $@"(^.{{{i}}})|(godness\w+)(?<=\2(\d+).*?\2)(\d+)");

正则表达式模式看起来像

(^.{0})|(godness\w+)(?<=\2(\d+).*?\2)(\d+)
   ^^^

【讨论】:

    【解决方案2】:

    你可以试试这个概念,你可以使用 i 作为参数并输入 i 的任何值。

    int i = 0;
     string Value =string.Format("(^.{0})|(godness\\w+)(?<=\\2(\\d+).*?\\2)(\\d+)",i);
     Match match = Regex.Match(strFile, Value);
    

    【讨论】:

    • 我认为大括号是正则表达式的一部分。由于String.Format() 的实际大括号必须转义,因此它应该是{{{0}}}
    • 这里所有的东西都转换为字符串,我们写了“{0}”来传递参数,用“i”的值替换。
    猜你喜欢
    • 2013-04-19
    • 2015-09-08
    • 2018-04-06
    • 2010-10-04
    • 2020-06-09
    • 2014-01-10
    • 1970-01-01
    • 2011-01-14
    • 1970-01-01
    相关资源
    最近更新 更多