正则表达式在逗号之间找到两个以上的引号

时间:2016-11-22 14:54:38

标签: regex notepad++

我正在寻找将在NotePad ++中搜索的正则表达式,以下格式[HERE]根本不应包含任何双引号:

,"[HERE]",

基本上,我希望在引用字段中找到逗号之间的任何其他引号。

Invalid: ,"hello "there"",
Invalid: ,"hello there"",
Invalid: ,"hell "o there",
Invalid: ,"""""""",
VALID: ,"hello there",
VALID: ,"",

我已经尝试了各种各样的例子,并尝试自己创作,但我无法理解这一点。

我最接近的是:

("[^",]+)"([^",]+")"

演示:http://regexr.com/3enk2

但这只会与,"Example" Place"",等明确示例相匹配,而不会与,"Example",

等其他示例相匹配

任何帮助表示赞赏!

2 个答案:

答案 0 :(得分:2)

要查找正确平衡的引号,请搜索,"[^"]*",以查找意外报价,搜索,"[^",]*("[^",]*)+",

注意方括号内的逗号用于无效引号。这可能是错的,但如果错了,那么你需要更强的关于逗号存在的规则。

解释有效和无效的正则表达式。使用,"",开始和结束。这涉及问题中显示的[HERE]文本周围的字符。其余两个正则表达式都处理[HERE]的内容。有效案例是零个或多个不是引用的字符。这是[^"]的简单匹配。无效的案例有一个或多个引号,两边都可以有其他非引号字符。 [HERE]包括xx"xxxxx"x"xxxxx"xx"以及"xx""xx"的示例无效。所有这些无效案例都可以描述为

  • 零个或多个非引号的字符,后跟
  • 一个或多个字符序列
    • 以引号开头,然后
    • 零个或多个不是报价的字符

在正则表达式中,非引号的字符为[^"]。零个或多个是[^"]*。括号中包含一系列事物,序列中的一个或多个是(...)+或本例("[^"]*)+

问题没有说明应如何处理与[HERE]相关的逗号。这个答案假设不允许这样做。它通过在"而不是引用"中添加逗号来表明这一点。条款,给予[^",]

组装我们得到的无效匹配件

,"                         // Opening characters
  [^",]                    // Character that is neither quote nor comma
       *                   //     zero or more of them
        (                  // Enclose the sequence
         "                 // a real quote
           [^",]*          // Zero or more characters that are neither quote nor comma
                 )         // End of the sequence
                  +        //    one or more of the sequence
                    ",     // Closing characters

答案 1 :(得分:1)

您可以将此正则表达式与锚点和否定字符类一起使用,以允许行以逗号开头并以逗号结尾,并在其间包含非逗号,非双引号内容:

^,"[^",]*",$

RegEx Demo