正则表达式分词

时间:2017-08-15 08:29:49

标签: java regex scala split

我有一句话:id,name,field,field 例如:"100,artist10XD,0,1"

我想用正则表达式将它们分开。问题是artistName也可以有一个逗号(这里的逗号的实际数量是未知的),所以我不能使用split(",")函数。

结果应为:

100
artist10XD
0
1

每一行都有4个值。

请注意,我必须按照规则使用正则表达式。

2 个答案:

答案 0 :(得分:3)

您仍然可以使用split(",");

结果是

split[0] == 100, 
split[last -1] == 0, 
split[last] == 1, 

其余部分可以连接成artistName

答案 1 :(得分:0)

不是通过正则表达式拆分行,而是尝试将正则表达式应用于整行。如果每行总是有4个值,并且只有艺术家名称可能包含逗号,那么你的正则表达式可能如下所示:

([^,]+),(.+),([^,]+),([^,]+)

如果该行与正则表达式匹配,则第二组中的艺术家名称将包含4个组。例如:

BufferedReader reader = new BufferedReader(new StringReader(""
    + "100,artist10XD,0,1\n"
    + "100,artist,10,XD,0,1"));

Pattern pattern = Pattern.compile("([^,]+),(.+),([^,]+),([^,]+)");
String line;

while ((line = reader.readLine()) != null)
{
  Matcher matcher = pattern.matcher(line);

  if (matcher.matches())
  {
    System.out.println("Artist name: " + matcher.group(2));
  }
}

上面的代码给出了以下输出:

Artist name: artist10XD
Artist name: artist,10,XD