我正在尝试将C#中的一些“硬编码”变量初始化(从自定义语言)解析为多个文件到db,但我遇到了问题:
示例代码解析#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? ......
有什么想法吗?
答案 0 :(得分:1)
我认为你的问题是你正在使用正则表达式中的贪婪限定符。在你的正则表达式中(为了便于阅读):
string strRegExCriteria = @"^sArrayName\[ArrayIndexVariable\]\." +
@"arrayPropertyNameHex.+= ?(.+?)$";
.+
之后arrayPropertyNameHex
,“贪婪地”匹配到行尾的所有内容,因此您的捕获永远不会受到影响。只需将其更改为非贪婪的匹配(+?
),它应该更好:
string strRegExCriteria = @"^sArrayName\[ArrayIndexVariable\]\." +
@"arrayPropertyNameHex.+?= ?(.+?)$";