【问题标题】:Split word by regex通过正则表达式拆分单词
【发布时间】:2017-08-15 08:29:48
【问题描述】:

我有这样一行:id,name,field,field
例如:"100,artist10XD,0,1"

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

结果应该是:

100
artist10XD
0
1

每行有 4 个值。

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

【问题讨论】:

  • 你总是每行有 4 个值吗?为什么不能使用制表符而不是逗号来分隔值?
  • artistName 可以有多少个逗号?
  • 如果您的值中有分隔符,您应该考虑在该值周围使用引号,例如 100,"artis,t10XD",0,1 。当您分隔该行时,将引号中的所有内容视为一个值。
  • 试试这个^([^,]+),(.*?),([^,]+),([^,]+)$

标签: java regex scala split


【解决方案1】:

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

结果是

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

其余的可以连接成艺术家名

【讨论】:

    【解决方案2】:

    我不会通过正则表达式拆分行,而是尝试将正则表达式应用于整行。如果您总是每行有 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
    

    【讨论】:

    • 我应该逐行阅读。我应该先做某事,然后再做另一件事。
    • 没错,您逐行阅读并将正则表达式应用于每一行。我更新了答案以包含一个示例。
    猜你喜欢
    • 1970-01-01
    • 2012-09-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-30
    • 2019-04-17
    相关资源
    最近更新 更多