在正则表达式中找到匹配的字符串,放入变量,棘手的字符串

本文关键字:字符串 变量 正则表达式 | 更新日期: 2023-09-27 18:19:02

我对这个正则表达式很陌生,还有很多我不明白。

  1. 我看到很多@,但我在MSDN中找不到它。@是什么意思?例如:Regex = new Regex("@{lalala},", RegexOptions.Compiled);

  2. 这就是我遇到的麻烦。我有这个字符串

    {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制表符、换行符、回车符。