1

我需要提取字符串中空格之间的文本。在下面的示例中,我希望将文本“401900 PRE”提取到名为 Recipe 的组中。组 Recipe 不能在字母 PRE 之后返回任何空格。这就是我目前所拥有的。'401900 PRE Current User' 被打印到屏幕上。我不知道如何在 PRE 之后停下来。

401900 PRE 文本定期更改,但其他文本元素保持不变。

        string recipe = "<OPERATE MODE> - 401900 PRE    Current User";

        Regex regex = new Regex(@".*<OPERATE MODE> - (?'Recipe'.*\ *)");
        MatchCollection mc = regex.Matches(recipe);

        foreach (Match m in mc)
        {
            Console.WriteLine(m.Groups["Recipe"]);
        }

        Console.ReadLine();

谢谢。

4

2 回答 2

2

只需在模式中包含您不想匹配的常量内容:

@".*<OPERATE MODE> - (?'Recipe'.*?)\s+Current User"

请注意,您需要使组内的重复变得不贪婪,否则会占用一些空间。

于 2013-08-28T20:03:38.910 回答
2

图案

<OPERATE MODE> - (?'Recipe'.*?)\s{2}

应该管用。这将匹配一个文字<OPERATE MODE> -,后跟在组中捕获的任何文本,Recipe在前两个空白字符处停止。

例如:

string recipe = "<OPERATE MODE> - 401900 PRE    Current User";

Regex regex = new Regex(@"<OPERATE MODE> - (?'Recipe'.*?)\s{2}");
MatchCollection mc = regex.Matches(recipe);

foreach (Match m in mc)
{
    Console.WriteLine(m.Groups["Recipe"]);  // 401900 PRE
}
于 2013-08-28T20:04:58.187 回答