0

我正在尝试在 C# 中将许多文件中的一些“硬编码”变量初始化(来自自定义语言)解析到数据库中,但我遇到了问题:

解析示例代码 #1 >>>

ArrayName[ArrayIndexVariable].arrayPropertyNameHex            = $A3

我正在尝试使用正则表达式:

string strRegExCriteria = @"^sArrayName\[ArrayIndexVariable\]\.arrayPropertyNameHex.+= ?(.+?)$";

然而,它返回.Success:

matchRegExCriteria.Groups[1].Value.ToString().Length.ToString();

...等于0?...


解析 #2 的示例代码 >>>

ArrayName[ArrayIndexVariable].arrayPropertyNameInt            = 6942

我正在尝试使用正则表达式:

string strRegExCriteria = @"^sArrayName\[ArrayIndexVariable\]\.arrayPropertyNameInt.+?(\d+)$";

但是,它也返回 .Success:

matchRegExCriteria.Groups[1].Value.ToString().Length.ToString();

...等于0?...

有任何想法吗?

4

1 回答 1

1

我认为您的问题是您在正则表达式中使用了贪婪的限定符。在您的正则表达式中(为便于阅读而分解):

string strRegExCriteria = @"^sArrayName\[ArrayIndexVariable\]\." +
  @"arrayPropertyNameHex.+= ?(.+?)$";

您拥有.+after arrayPropertyNameHex,它“贪婪地”将所有内容匹配到行尾,因此您的捕获永远不会受到打击。只需将其更改为非贪婪匹配 ( +?),它应该会更好地工作:

string strRegExCriteria = @"^sArrayName\[ArrayIndexVariable\]\." +
  @"arrayPropertyNameHex.+?= ?(.+?)$";
于 2012-05-01T00:38:10.477 回答