在正则表达式中找到匹配的字符串,放入变量,棘手的字符串
本文关键字:字符串 变量 正则表达式 | 更新日期: 2023-09-27 18:19:02
我对这个正则表达式很陌生,还有很多我不明白。
-
我看到很多@,但我在MSDN中找不到它。@是什么意思?例如:Regex = new Regex("@{lalala},", RegexOptions.Compiled);
-
这就是我遇到的麻烦。我有这个字符串
{BaseClass.InheritClass Tuple.Create("MachineState string.Empty)},
我想做的是得到继承类和机器属性的名字,把它放入变量中。
我试过了:
Regex regex = new Regex(@"'{BaseClass.(?<inheritClassStr>'d+),Tuple.Create'(""(?<machineStateStr>'d+)"",string.Empty')'},", RegexOptions.Compiled);
我希望在后面的代码中我可以这样做:
string inheritClassString = inheritClassStr;
string machineStateString = machineStateStr;
但是它不工作,我不知道如何调试这个。我不知道Regex捕获了什么,所以我很难调试。
非常感谢您的帮助
你要做的是(在正则表达式中):
'{BaseClass.(?<inheritClassStr>.*?),Tuple.Create'("(?<machineStateStr>.*?)",string.Empty')'}
澄清:
您使用的'd
将只计算数字,但c#中的标识符也倾向于包含字母。
.*
会以贪婪的方式计算任何字符(所以越多越好),所以这里不是一个好的选择
.*?
将计算任何字符,但不是贪婪的方式(所以尽可能小的集合)
c#中没有魔法所以你在regex中的声明不会被转换成变量但你需要像这样访问它们:
var inheritClassString = regex.Groups["inheritClassStr"].Value;
字符串开头的@
只是表示c#编译器不会尝试解释可以放在没有前缀的字符串中的特殊字符,如't'n'r
制表符、换行符、回车符。