将动态值传递给 C# 正则表达式中的量词

jho*_*625 5 c# regex replace

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

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

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

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

Wik*_*żew 5

不清楚您想将哪些字符串与正则表达式匹配,但如果您需要在模式中使用 vriable,您可以轻松地在逐字字符串文字中使用字符串插值。在声明正则表达式模式时,最好使用逐字字符串文字,以避免过度转义。

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

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

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

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

正则表达式模式看起来像

(^.{0})|(godness\w+)(?<=\2(\d+).*?\2)(\d+)
   ^^^
Run Code Online (Sandbox Code Playgroud)