正则表达式模式java与逗号

时间:2016-06-15 08:14:26

标签: java regex

我有一个来自excel列的下面的字符串

  "\"USE CODE \"\"Gef, sdf\"\" FROM 1/7/07\""

我想设置正则表达式模式来检索整个字符串,这样我的结果就像

"USE CODE ""Gef, sdf"" FROM 1/7/07"

以下是我尝试的内容

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class RegexMatches
{
    public static void main( String args[] ){

      // String to be scanned to find the pattern.
      String line = "\"USE CODE \"\"Gef, sdf\"\" FROM 1/7/07\", Delete , Hello , How are you ? , ";
      String line2 = "Test asda ds asd, tesat2 . test3";

      String dpattern = "(\"[^\"]*\")(?:,(\"[^\"]*\"))*,|([^,]+),";
      // Create a Pattern object
      Pattern d = Pattern.compile(dpattern);
      Matcher md = d.matcher(line2);

      Pattern r = Pattern.compile(dpattern);

      // Now create matcher object.
      Matcher m = r.matcher(line);
      if (m.find( )) {
         System.out.println("Found value: 0 " + m.group(0) );
       //  System.out.println("Found value: 1 " + m.group(1) );
         //System.out.println("Found value: 2 " + m.group(2) );
      } else {
         System.out.println("NO MATCH");
      }
   }
}

,结果出现之后,(逗号),因此输出

Found value: 0 "USE CODE ""Gef,

应该是

Found value: 0 "USE CODE ""Gef sdf"" FROM 1/7/07",

,对于第二行Matcher m = r.matcher(line2);,输出应为

Found value: 0 "Test asda ds asd",

1 个答案:

答案 0 :(得分:2)

您可以使用

(?:"[^"]*(?:""[^"]*)*"|[^,])+

请参阅regex demo

<强>解释

  • " - 引用引用
  • [^"]* - 除双引号外的0 +字符
  • (?:""[^"]*)* - {+ 1}}文本的0 +序列,后跟除双引号之外的0 +字符
  • "" - 尾随报价

OR:

  • " - 任何字符,但逗号

整个模式匹配一​​次或多次,因为[^,](?:...)+匹配一次或多次匹配。

IDEONE demo

+