.net 第一种非双重报价模式

.net 第一种非双重报价模式,.net,regex,.net,Regex,我想创建一个模式来匹配字符串中的第一个非双引号。所有不是一句话的东西都应该被忽略 我已经尝试了很多年,但似乎没有取得任何进展。这可能很简单 迄今为止的最佳尝试:(?在sed中提供一个演示程序,将行的开头剪切到所需的第一个未配对报价,包括在内;显示正确的报价已被识别: bash-3.1$ sed -En 's/^[^"]*("[^"]*"[^"]*)*[^"]*"//;T;p' 例如,最有趣的示例案例7的输出,如“sa”“dadas”dfgdfg: dfgdfg这是(*跳过)(*失败)机制的完美

我想创建一个模式来匹配字符串中的第一个非双引号。所有不是一句话的东西都应该被忽略

我已经尝试了很多年,但似乎没有取得任何进展。这可能很简单


迄今为止的最佳尝试:
(?在sed中提供一个演示程序,将行的开头剪切到所需的第一个未配对报价,包括在内;显示正确的报价已被识别:

bash-3.1$ sed -En 's/^[^"]*("[^"]*"[^"]*)*[^"]*"//;T;p'
例如,最有趣的示例案例7的输出,如“sa”“dadas”dfgdfg:

dfgdfg

这是
(*跳过)(*失败)
机制的完美示例:

([\'\"]).*?\1(*SKIP)(*FAIL)|[\'\"]
赞美这种优雅:您将字符串中两个相同引号之间的所有内容进行匹配(零次或多次),然后让正则表达式引擎失败。请参见
(注意:字符类中不需要转义引号,只需为SO解释器转义即可。)
现在的问题是,
.NET
不支持这一点,但您可以找到一种解决方法:

using System;
using System.Text.RegularExpressions;
using System.Collections.Specialized;
class Program {
    static void Main()  {
        string s1 = @"as""""sa""""dadas""dfgdfg - match (last quote)";

        var myRegex = new Regex(@"(['""]).*?\1|(['""])");
        var group1Caps = new StringCollection();

        Match matchResult = myRegex.Match(s1);

        // put Group 1 captures in a list
        while (matchResult.Success) {
            if (matchResult.Groups[1].Value != "") {
                group1Caps.Add(matchResult.Groups[1].Value);
            }
            matchResult = matchResult.NextMatch();
        }

        Console.WriteLine("*** Is there a Match? ***");
        if(group1Caps.Count>0) Console.WriteLine("Yes");
        else Console.WriteLine("No");
    }
}
看看这个。
基本思路是捕获第一组中您真正想要的内容,然后检查其中是否包含任何内容。有关此主题的更多信息,请查看精彩的“双引号”,您是指“双引号”?我认为可能会混淆双引号和单引号。