.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");
}
}
看看这个。
基本思路是捕获第一组中您真正想要的内容,然后检查其中是否包含任何内容。有关此主题的更多信息,请查看精彩的“双引号”,您是指“双引号”?我认为可能会混淆双引号和单引号。