c#regex第一个单词匹配

时间:2013-10-12 08:44:25

标签: c# regex

我有一个名为str的字符串,其值为:PRINT "HELLO WORLD"

我正在尝试使用C#中的Regex进行匹配,但这不起作用:

Regex.IsMatch(str, @"^PRINT");

但如果我的str的值只有PRINT,则匹配。

为了匹配引号中的后续字符,我要在我的正则表达式中更改什么?


编辑:

当str值为PRINT "Hello WOrld"时,我没有触及此条件块,但如果它具有PRINT,则确实如此。

if (Regex.IsMatch(str, @"^PRINT")) {
    // some codes
}

编辑:

如果正则表达式会考虑关键字,PRINT和用引号括起来的字符串块,用空格分隔,那么等效的正则表达式是什么? 这是对的吗?

@"^PRINT\w+\".*\""

如何在正则表达式中分隔引号?

4 个答案:

答案 0 :(得分:1)

您可以使用"以逐字字符串形式转义""。要在正常字符串中转义",您必须使用\"


这将捕获这两个"

之间的任何内容
if (Regex.IsMatch(str, @"^PRINT")) 
{
    Regex.Match(str,@"(?<="").*?(?="")").Value;//captures content within "
}

答案 1 :(得分:1)

根据我收集的内容,您尝试匹配以下列表。如果你可以更明确地想要匹配(更多规则等),那么为它制作正则表达式应该相当容易。

  • 以PRINT开头
  • 之后有1个非单词字符
  • 有一个引用
  • 之后有什么(任何东西)
  • 有一个引用
  • 行尾

你可以试试这个:

var pattern = @"^PRINT[^\w]+""(.*)""$";  // you usually need those [] things :)

// * ""$ - requires the " to be at the end of the line
// * .* should match an empty quote ""
// you should trim the string on this one before matching

这是测试代码似乎表明它正常工作:

// notice that one of these has an embedded quote
var list = new [] { "PRINT", "PRINT ", "PRINT \"STUFF\"", "PRINT\t  \t\"AND \"FUN \"", " PRINT \"BAD\" " };
var pattern = @"^PRINT[^\w]+""(.*)""$";
foreach(var value in list) {
    var m = Regex.Match(value, pattern);
    if (m.Success) {
        Console.WriteLine("success: '{0}' found '{1}'", value, m.Groups[1].Value);
    } else {
        Console.WriteLine("failed:  '{0}'", value);
    }
}

结果:

failed:  'PRINT'
failed:  'PRINT '
success: 'PRINT "STUFF"' found 'STUFF'
success: 'PRINT      "AND "FUN "' found 'AND "FUN '
failed:  ' PRINT "BAD" '

答案 2 :(得分:0)

如果您的字符串 str PRINT之前包含任何空格或不可见字符,那么Regex.IsMatch(str, @"^PRINT")将返回 false ,请使用Regex.IsMatch(str, @"^.*PRINT")代替。

从输入字符串中提取Hello WOrld的示例:

string strInput = @" PRINT ""Hello WOrld""";
string pattern = @"^.*PRINT\s*""(?<keyword>(\s*\S+\s*)+)""";

if (Regex.IsMatch(strInput, pattern)) {
    Match m = Regex.Match(strInput, pattern);
    string extractedValue = m.Groups["keyword"].Value;
}

在逐字字符串中,使用双引号""来转义单引号"

答案 3 :(得分:-1)

Regex.IsMatch(str,@“\ bPRINT \ b”);