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+'".*'""
如何分隔正则表达式中的引号?
您可以使用
逐字字符串中的""
转义"
。要转义普通字符串中的"
,您必须使用'"
这将捕获这两个"
之间的任何内容
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" '
如果你的字符串 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;
}
在逐字字符串中,使用双引号 ""
转义单引号"
Regex.IsMatch(str, @"''bPRINT''b"(;