【问题标题】:Regex Remove white spaces from a group正则表达式从组中删除空格
【发布时间】:2018-06-11 02:27:50
【问题描述】:

嗨,我有以下价值观

000001010016C02AB  111*
000001010016C02    111H
000001010016C      111 

预期的输出是

00000101001,C02AB,*
00000101001,C02,H
00000101001,C, 

值可能会有所不同。此字符串的长度将始终为 23。如果字符不存在,则该位置将用空格填充。我现在拥有的正则表达式是

(^.{11})[0-9](.{5})(?:.{5})(.*)

但在第二组中使用此正则表达式时,会返回空格。我希望删除那些空白。

电流输出:

00000101001,C02AB,*
00000101001,C02  ,H
00000101001,C    , 

谁能帮我去掉第二组的空格?

Demo

【问题讨论】:

  • 您的正则表达式风格(您使用的语言)是什么?
  • @JorgeCampos Java

标签: java regex regex-group


【解决方案1】:

使用结束断言$ 可以轻松匹配:

^(.{11})\d(\w+).+(.)$

【讨论】:

    【解决方案2】:

    在 Java 中,您可以使用 Matcher#appendReplacement()trim() matcher.group(2) 值实现自定义替换逻辑:

    String strs[]  = {"000001010016C02AB  111*", "000001010016C02    111H", "000001010016C      111 ", "901509010012V      154 "};
    Pattern p = Pattern.compile("(.{11})[0-9](.{5}).{5}(.*)");
    for (String s: strs) {
        StringBuffer result = new StringBuffer();
        Matcher m = p.matcher(s);
        if (m.matches()) {
                m.appendReplacement(result, m.group(1) + "," + m.group(2).trim()  + "," + m.group(3));
        }
        System.out.println(result.toString());
    }
    

    结果:

    00000101001,C02AB,*
    00000101001,C02,H
    00000101001,C, 
    90150901001,V, 
    

    请参阅Java demo

    注意我删除了^,因为Matcher#matches() 方法需要完整的字符串匹配。如果字符串可能包含换行符,请使用Pattern.DOTALL 选项。

    【讨论】:

      【解决方案3】:
      • 查找:^(.{11})\d(\S+)\s*.{3}(.?)$
      • 替换:$1,$2,$3

      说明:

      ^           : beginning of string
        (.{11})   : 11 any character, stored in group 1
        \d        : 1 digit
        (\S+)     : 1 or more non spaces, stored in group 2
        \s*       : 0 or more spaces
        .{3}      : 3 any character
        (.?)      : 0 or 1 character, stored in group 3
      $
      

      结果:

      00000101001,C02AB,*
      00000101001,C02,H
      00000101001,C, 
      

      【讨论】:

        【解决方案4】:

        在正则表达式中有捕获组,只需将这两个组连接起来就可以得到结果,在连接中可以插入逗号

         ^(\w+)\s*\d+(\D+)$
        

        组就是里面的东西()

        【讨论】:

        猜你喜欢
        • 2020-10-27
        • 2011-11-01
        • 2012-11-15
        • 2018-11-20
        • 1970-01-01
        • 1970-01-01
        • 2021-04-10
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多