C# 正则表达式第一个单词匹配

本文关键字:单词匹 第一个 正则表达式 | 更新日期: 2023-09-27 18:34:57

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

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

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

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

我要在我的正则表达式中更改什么以匹配用引号括起来的后续字符?


编辑:

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

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

编辑:

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

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

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

C# 正则表达式第一个单词匹配

您可以使用

逐字字符串中的""转义"。要转义普通字符串中的",您必须使用'"


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

if (Regex.IsMatch(str, @"^PRINT")) 
{
    Regex.Match(str,@"(?<="").*?(?="")").Value;//captures content within "
}

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

  • 从打印开始
  • 后面有 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" '

如果你的字符串 strPRINT 之前包含任何空格或不可见字符,那么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;
}

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

Regex.IsMatch(str, @"''bPRINT''b"(;