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

本文关键字:值传 量词 动态 正则表达式 | 更新日期: 2023-09-27 17:56:02

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

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

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

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

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

目前尚不清楚要与正则表达式匹配哪些字符串,但是如果您需要在模式中使用 vriable,则可以轻松地在逐字字符串文本中使用字符串内插。声明正则表达式模式时,首选逐字字符串文本,以避免过度转义。

由于字符串插值仅在 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+)
   ^^^

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

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