我需要在字符串中的空格之间提取文本。在下面的示例中,我希望将文本“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();
感谢。
答案 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
}