正则表达式在空格之间选择文本

时间:2013-08-28 20:02:01

标签: .net regex

我需要在字符串中的空格之间提取文本。在下面的示例中,我希望将文本“401900 PRE”提取到名为Recipe的组中。 Recipe组不得在字母PRE后返回任何空格。这就是我现在所拥有的。 '401900 PRE当前用户'被打印到屏幕上。 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();

感谢。

2 个答案:

答案 0 :(得分:2)

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

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

请注意,您需要在组ungreedy内进行重复,否则会占用一些空格。

答案 1 :(得分: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
}