我有一个名为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+\".*\""
如何在正则表达式中分隔引号?
答案 0 :(得分:1)
您可以使用"
以逐字字符串形式转义""
。要在正常字符串中转义"
,您必须使用\"
这将捕获这两个"
if (Regex.IsMatch(str, @"^PRINT"))
{
Regex.Match(str,@"(?<="").*?(?="")").Value;//captures content within "
}
答案 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" '
答案 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”);