我有一个来自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",
答案 0 :(得分:2)
您可以使用
(?:"[^"]*(?:""[^"]*)*"|[^,])+
请参阅regex demo
<强>解释强>:
"
- 引用引用[^"]*
- 除双引号外的0 +字符(?:""[^"]*)*
- {+ 1}}文本的0 +序列,后跟除双引号之外的0 +字符""
- 尾随报价OR:
"
- 任何字符,但逗号整个模式匹配一次或多次,因为[^,]
和(?:...)+
匹配一次或多次匹配。
+