C# C正则表达式来查找所有双引号文本

C# C正则表达式来查找所有双引号文本,c#,regex,C#,Regex,示例输入 在本保单中,“您”和“您的”一词指的是指定的 声明中显示的被保险人。我们,我们和我们的朋友 指提供此保险的公司。自动的 我试过这样的[\s]\?.*\1[\s\n\t\b,.] 它不承认我们和汽车 可能还有其他类似的情况 在本保单中,“您”和“您的”一词指的是指定的 声明中显示的被保险人。我们,我们和我们的朋友 指提供此保险的公司。自动的 这是我需要处理的另一个负面测试案例,我只考虑有效的双引号 这是你自己的。这包括您获得所有权的汽车 政策开始后 在本例中,我应该能够删除提供此保险的公

示例输入

在本保单中,“您”和“您的”一词指的是指定的 声明中显示的被保险人。我们,我们和我们的朋友 指提供此保险的公司。自动的

我试过这样的[\s]\?.*\1[\s\n\t\b,.]

它不承认我们和汽车

可能还有其他类似的情况

在本保单中,“您”和“您的”一词指的是指定的 声明中显示的被保险人。我们,我们和我们的朋友 指提供此保险的公司。自动的

这是我需要处理的另一个负面测试案例,我只考虑有效的双引号

这是你自己的。这包括您获得所有权的汽车 政策开始后


在本例中,我应该能够删除提供此保险的公司的完整名称

如果您有嵌套的括号,则需要类似解析器的内容

否则:

string input = "Throughout this policy the words \"you\" and \"your\" refer to the Named Insured shown in the Declarations. The words \"we,\" \"us\" and \"our\" refer to the Company providing this insurance. \"auto.\"";
string[] result = Regex.Matches(input, "(\".*?\")+").Cast<Match>().Select(x => x.Value).ToArray();
看看这个

(["'])(?:(?=(\\?))\2.)*?\1

如果有嵌套的括号,则需要类似解析器的东西

虽然这对于任意级别的嵌套引号都是正确的,但对于有限数量的嵌套却不是这样。 此正则表达式处理所有给定的测试用例:

(?<=\s)"[^"]*(?<=\s)"[^"]*".*?"|(?<=\s)"[^"]*"

|之前的子模式匹配嵌套1级深的引号,之后的子模式匹配未列出的引号。

如何处理。*?+,如中所示,如果将其更改为\\?.*?\1,则它似乎可以工作。目前,auto后面没有任何after字符,并且us无法识别,因为we后面的空格与we匹配,因此无法在us中进行匹配。你需要前后字符是有原因的吗?@AlfieGoodacre你的表达适用于积极情况,但不适用于消极情况,如嵌套双引号,请参阅我的消极情况更新问题为什么公司提供此保险是单一匹配,而我们,我们是两个?@HimBromBeere这是一个负面场景,客户由我们处理,因此regex应将匹配项标识为提供此保险的公司,因为提供的是嵌套双引号。虽然此代码可能有效,但您还应解释此代码有效的原因以及ops regex无效的原因。