带逗号的正则表达式模式java
我有一个下面的字符串,它来自excel列带逗号的正则表达式模式java,java,regex,Java,Regex,我有一个下面的字符串,它来自excel列 "\"USE CODE \"\"Gef, sdf\"\" FROM 1/7/07\"" 我想设置regex模式来检索整个字符串,这样我的结果就会与 "USE CODE ""Gef, sdf"" FROM 1/7/07" 下面是我试过的 import java.util.regex.Matcher; import java.util.regex.Pattern; public class RegexMatches { public sta
"\"USE CODE \"\"Gef, sdf\"\" FROM 1/7/07\""
我想设置regex模式来检索整个字符串,这样我的结果就会与
"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(第2行)代码>输出应为
Found value: 0 "Test asda ds asd",
你可以用
(?:"[^"]*(?:""[^"]*)*"|[^,])+
见
说明:
“
-领先报价
[^”]*
-0+字符(双引号除外)
(?:“[^”]*)*
-0+序列的”
文本后跟0+字符,而不是双引号
“
-尾随引号
或:
[^,]
-除逗号外的任何字符
当整个模式包含(?:…)+
时,会匹配1次或多次,并且+
匹配1次或多次出现
:
注意:在实际场景中,我不能像删除引号然后应用正则表达式那样对给定字符串进行操作。我所能做的就是通过正则表达式模式获得它。因此,这个java是为了测试正则表达式模式。我不确定您试图对非捕获组?:
和OR运算符|
,但是看起来您可以使用(\“[^\”]*\”{3}
并且它将匹配3个带引号的组。您的意思是只需要获得带双引号的子字符串吗?例如?第1行和第2行的预期输出是什么?也许可以?为什么不简单地选择两个\”之间的所有内容?像\“*\”
。您可以对有效性字符串进行计算前检查,确保\“
是一对数字,以避免误报。请参阅-我刚刚修改了它以返回第一个匹配项。它对您有效吗?
String line = "\"USE CODE \"\"Gef, sdf\"\" FROM 1/7/07\", Delete , Hello , How are you ? , ";
String line2 = "Test asda ds asd, tesat2 . test3";
Pattern pattern = Pattern.compile("(?:\"[^\"]*(?:\"\"[^\"]*)*\"|[^,])+");
Matcher matcher = pattern.matcher(line);
if (matcher.find()){ // if is used to get the 1st match only
System.out.println(matcher.group(0));
}
Matcher matcher2 = pattern.matcher(line2);
if (matcher2.find()){
System.out.println(matcher2.group(0));
}