Match anything between quotes except commas(匹配引号之间除逗号以外的任何内容)
问题描述
我有此正则表达式:(?<=")(?:\.|[^"\])*(?=")
它匹配引号内的每个字符,并排除引号本身。
当我使用这样的字符串尝试时:
"one","two","three"
它还匹配逗号,因此匹配结果如下:
one
,
two
,
three
有没有办法修改正则表达式使其排除那些逗号?也就是说,输出为:
one
two
three
我需要在正则表达式中排除那些引号,并且不在匹配结果中包含逗号。
这是我最大的正则表达式:
((0[1-9]|[12][0-9]|3[01]).(0[1-9]|1[012]).dddd)|(([0-1][0-9])|([2][0-3])):([0-5][0-9]):([0-5][0-9])|"((?:\.|[^"\])*)"
第一部分匹配日期:dd.mm.yyyy
((0[1-9]|[12][0-9]|3[01]).(0[1-9]|1[012]).dddd)
第二部分匹配时间:hh:mm:ss
(([0-1][0-9])|([2][0-3])):([0-5][0-9]):([0-5][0-9])
最后一个应该匹配引号之间的所有字符:
";((?:.|[^";])*)
但是正则表达式上的最后一部分不能以不排除引号的方式工作。此外,由于某些原因,它会删除字符串中用引号引起来的所有空格。
输入是包含如下字符串的文本文件:
"AK Pz 310u PI-13-5","23.02.2015","07:45:00","23.02.2015","09:20:00","False","True","23.02.2015","07:40:00","2","Common","AK Pz 310u PI-13-5","Common"
预期输出是引号中的值数组(当然,本身不带逗号和引号)。我之所以使用这么大的正则表达式来匹配日期和时间,是因为如果它们是错误的,就不应该进行匹配。
推荐答案
要使您的正则表达式不匹配逗号,您需要删除环绕式,并使用捕获组来获取双引号之间的内容。因为查找是不匹配任何字符的断言。因此,在此"one","two","three"
输入中,首先您的正则表达式与one
匹配,然后它与以下,
匹配,因为双引号中也有逗号。
"((?:\.|[^"\])*)"
此正则表达式强制匹配每个挡路双引号字符串。
Java代码将是
String value = ""one","two","three"";
Matcher m = Pattern.compile(""((?:\\.|[^"\\])*)"").matcher(value);
while(m.find())
{
System.out.println(m.group(1));
}
输出:
one
two
three
DEMO
这篇关于匹配引号之间除逗号以外的任何内容的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:匹配引号之间除逗号以外的任何内容


- 将 Java Swing 桌面应用程序国际化的最佳实践是什么? 2022-01-01
- 未找到/usr/local/lib 中的库 2022-01-01
- java.lang.IllegalStateException:Bean 名称“类别"的 BindingResult 和普通目标对象都不能用作请求属性 2022-01-01
- 获取数字的最后一位 2022-01-01
- 如何指定 CORS 的响应标头? 2022-01-01
- 如何使 JFrame 背景和 JPanel 透明且仅显示图像 2022-01-01
- 在 Java 中,如何将 String 转换为 char 或将 char 转换 2022-01-01
- 转换 ldap 日期 2022-01-01
- GC_FOR_ALLOC 是否更“严重"?在调查内存使用情况时? 2022-01-01
- Eclipse 的最佳 XML 编辑器 2022-01-01