Java正则表达式转义逗号

java regex split

9143 观看

3回复

4202 作者的声誉

我有一个csv文件,我想使用该String split()方法。我希望返回的数组的每个元素都是split()csv中逗号分隔的值。但是,csv文件中还有其他逗号。

幸运的是,这些其他逗号都像逃脱一样 '\,'

我无法为该split()方法获得正确的正则表达式。我想用逗号分隔,前面没有转义字符。

我目前的代码是:

String[] columns = new String[CONST];
columns = someString.split("*^\\,*");

对我来说,这说:用逗号分隔,但逗号前的字符不能是转义字符。允许逗号之前或之后的任意数量的字符。

  1. 如何获得正确的正则表达式?
作者: CodeKingPlusPlus 的来源 发布者: 2013 年 1 月 21 日

回应 3


0

28537 作者的声誉

首先,逗号在您使用的位置没有特殊含义,因此您可以省略转义

你的正则表达式中最大的问题是,*单独没有给你任何意义。*表示任何先前令牌的出现。

所以正则表达式应该是

.*,.* (我认为逃避逗号应该仍然没问题 .*\,.*

然后,来使用,你正在使用正则表达式String.split()String.split()期待分隔符的正则表达式。因此,您应该只传递一个,正则表达式。有.*,.*作为“分隔符”将会给你带来意想不到的结果(你可以试试)。

作者: Adrian Shum 发布者: 2013 年 1 月 21 日

0

700 作者的声誉

由于我在搜索时点击此页面,我将按照说明回答问题并放置正确的模式(并且为了完整性):

columns = someString.split("[^\\\\],");

请注意,您需要4个转义字符,因为您需要2个转义字符才能在字符串中创建1个转义字符。换句话说,“\\”创建字符串\。所以“\\\\”创建字符串\\,它在正则表达式中转义转义以在正则表达式中创建char \。因此,在字符串中需要4个转义字符才能在正则表达式中创建一个转义字符。括号和克拉是制作不声明的一种方式(特别是对于单个字符)。

您还可以包围不希望用引号拆分的CSV条目。然后使用以下解决方案:Java:拆分以逗号分隔的字符串,但忽略引号中的逗号

我个人的偏好是因为我编写的环境而使用拆分第三方解析器。

作者: EngineerWithJava54321 发布者: 2015 年 1 月 14 日

0

1848 作者的声誉

正确的方法是使用解析器(处理\\, \, ,)但使用简单的正则表达式可以工作;

jshell> "a,b".split("(?!\\\\),")
$2 ==> String[2] { "a", "b" }

如何测试不起作用的东西;

jshell> "a,b".split("[^\\\\],")
$1 ==> String[2] { "", "b" }

jshell> "a,b".split("*^\\,*")
|  java.util.regex.PatternSyntaxException thrown: Dangling meta character '*' near index 0
*^\,*
^
|        at Pattern.error (Pattern.java:1997)
|        at Pattern.sequence (Pattern.java:2172)
|        at Pattern.expr (Pattern.java:2038)
|        at Pattern.compile (Pattern.java:1760)
|        at Pattern.<init> (Pattern.java:1409)
|        at Pattern.compile (Pattern.java:1065)
|        at String.split (String.java:2307)
|        at String.split (String.java:2354)
|        at (#6:1)
作者: user1133275 发布者: 2019 年 1 月 29 日
32x32