1

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

  1. 我看到很多@,但我在 MSDN 中找不到。@ 是干什么用的?例如:正则表达式 regex = new Regex("@{lalala},", RegexOptions.Compiled);

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

    {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;

但它不起作用,我不知道如何调试它。我不知道 Regex 捕获了什么,所以我很难调试。

您的帮助将不胜感激。

4

1 回答 1

1

你所追求的是(如正则表达式):

\{BaseClass.(?<inheritClassStr>.*?),Tuple.Create\("(?<machineStateStr>.*?)",string.Empty\)\}

澄清:

\d您使用的将仅计算数字,但 C# 中的标识符也往往包含字母。

.*会以贪婪的方式计算任何字符(所以越多越好)所以这不是一个好的选择

.*?将以不贪婪的方式计算任何字符(因此尽可能小)

C# 中没有魔法,因此您在正则表达式中的声明不会转换为变量,但您需要像这样访问这些:

var inheritClassString = regex.Groups["inheritClassStr"].Value;

@字符串开头的那个只是表示c#编译器不会尝试解释可以放入的特殊字符,否则没有前缀字符串,例如\t\n\r制表符,换行符,回车符。

于 2013-06-19T06:04:02.033 回答