我在这个正则表达式中非常新,还有很多我不理解。
我看到很多@,但我在MSDN中找不到它。什么是@ for?例如: Regex regex = new Regex(“@ {lalala}”,RegexOptions.Compiled);
这就是我遇到的麻烦。我有这个字符串。
{BaseClass.InheritClass,Tuple.Create( “MachineState” 的String.Empty)},
我想要做的是获取InheritClass和MachineState的名称,将其放入变量中。
我试过了:
Regex regex = new Regex(@"\{BaseClass.(?<inheritClassStr>\d+),Tuple.Create\(""(?<machineStateStr>\d+)"",string.Empty\)\},", RegexOptions.Compiled);
我希望稍后在代码中我能做到这样的事情:
string inheritClassString = inheritClassStr;
string machineStateString = machineStateStr;
但它不起作用,我不知道如何调试它。我不知道正则表达式捕获了什么,所以我很难调试。
非常感谢您的帮助。
答案 0 :(得分:1)
你所追求的是(正则表达式):
\{BaseClass.(?<inheritClassStr>.*?),Tuple.Create\("(?<machineStateStr>.*?)",string.Empty\)\}
澄清:
您使用的 \d
仅数学数字,但C#中的标识符也包含字母。
.*
会以贪婪的方式对任何角色进行数学运算(所以越多越好)所以这不是一个好选择
.*?
会对任何角色进行数学计算,但不要贪婪(尽可能小的设置)
C#中没有魔法所以你在正则表达式中的声明不会被转换为变量,但是你需要访问这些:
var inheritClassString = regex.Groups["inheritClassStr"].Value;
字符串开头的@
表示c#编译器不会尝试解释可以放入的特殊字符,否则不会加前缀字符串,例如\t\n\r
制表符,新行,回车符。