正则表达式从组中删除空格

时间:2017-12-31 13:59:40

标签: java regex regex-group

您好我有以下数值

000001010016C02AB  111*
000001010016C02    111H
000001010016C      111 

预期的输出是

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

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

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

但是在第二组中使用此Regex时会返回空格。我希望那些白色空间被删除。

当前输出:

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

有人可以帮我删除第二组中的空格吗?

Demo

4 个答案:

答案 0 :(得分:2)

  • 查找:^(.{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, 

答案 1 :(得分:1)

在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选项。

答案 2 :(得分:0)

在正则表达式中有捕获组,只是连接这两个组并且你将获得结果,在连接中你可以插入一个逗号

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

一个组就在里面()

答案 3 :(得分:0)

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

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