gpt4 book ai didi

c# - 正则表达式匹配除 C# 中引号中的字符串以外的所有内容

转载 作者:行者123 更新时间:2023-12-03 18:00:53 24 4
gpt4 key购买 nike

我是 C# 中正则表达式用法的新手。我想要一个正则表达式从给定列表中找到下一个关键字,但它没有被引号括起来。

例如如果我有一个看起来像这样的代码:

            while (t < 10)
{
string s = "get if stmt";
u = GetVal(t, s);
for(;u<8;u++)
{
t++;
}

}

我尝试将正则表达式用作 @"(.*?)\s(FOR|WHILE|IF)\s"但它给了我“如果”作为下一个关键字。然而,我想在 while 之后获取下一个关键字作为“for”而不是用引号括起来的“if”。

无论如何都可以使用 Regex 完成吗?或者我将不得不使用常规编程?

最佳答案

尝试以下 RegEx(编辑: 已修复)。

(?:[^\"]|(?:(?:.*?\"){2})*?)(?: |^)(?<kw>for|while|if)[ (]

注意:因为此 RegEx 文字包含引号,所以您不能在字符串前使用 @ 符号。请记住,如果您向字符串中添加任何 RegEx 特殊字符,则需要对它们进行适当的双重转义(例如\w)。确保在与 RegEx 匹配时还指定了多行参数,以便插入符号 (^) 被视为新行的开头。

这还没有经过测试,但应该可以完成工作。如果有任何问题,请告诉我。此外,根据您想在这里做的更多事情,我可能会建议使用标准文本解析(非正则表达式),因为它会很快变得更具可读性,具体取决于您想从代码中提取多少数据。希望对您有所帮助。

编辑:下面是一些示例代码,我已经对其进行了测试,并且非常有信心它可以按预期工作。

var input = "while t < 10 loop\n s => 'this is if stmt'; for u in 8..12 loop \n}"; 
var pattern = "(?:[^\"]|(?:(?:.*?\"){2})*?)(?: |^)(?<kw>for|while|if)[ (]";
var matches = Regex.Matches(input, pattern);
var firstKeyword = matches[0].Groups["kw"].Value;
// The following line is a one-line solution for .NET 3.5/C# 3.0 to get an array of all found keywords.
var keywords = matches.Cast<Match>().Select(match => match.Groups["kw"].Value).ToArray();

希望现在这应该是您的完整解决方案...

关于c# - 正则表达式匹配除 C# 中引号中的字符串以外的所有内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/614410/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com