0

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

我正在尝试在 C# 中使用正则表达式来匹配它,但这不起作用:

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

但如果我的 str 的值为 only PRINT,则匹配。

为了匹配括在引号中的后续字符,我将在我的正则表达式中进行哪些更改?


编辑:

我有这个条件块,当 str 值为 时,它不会被触及PRINT "Hello WOrld",但如果它有PRINT,它会。

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

编辑:

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

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

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

4

4 回答 4

1

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

  • 从打印开始
  • 后面有 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" '
于 2013-10-12T09:58:46.963 回答
1

您可以逐字逐句转义..要转义"为普通字符串,您必须使用"""\"


这将捕获这两者之间的任何内容"

if (Regex.IsMatch(str, @"^PRINT")) 
{
    Regex.Match(str,@"(?<="").*?(?="")").Value;//captures content within "
}
于 2013-10-12T09:09:31.060 回答
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;
}

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

于 2013-10-12T09:45:35.810 回答
-1

正则表达式.IsMatch(str, @"\bPRINT\b");

于 2013-10-12T08:58:07.423 回答