使用正则表达式删除短于长度2的字符串

时间:2016-03-09 15:05:06

标签: java regex

我有由序列组成的文本文件。我的文本文件看起来像

  • 1,48 15
  • 1 15,32
  • 1 15,32,45
  • 1,45 15,32

我想删除空格前长度小于2的字符串。例如。第二个和第三个序列在空格之前只包含1个数字,我想丢弃那些字符串,但是第一个和最后一个序列由2个数字组成,这些数字将保留。 期望的输出将是:

  • 1,48 15
  • 1,45 15,32

我试过这个表达

s1.replaceAll("\\b[\\w']{1}\\b", "")

但我的输出看起来像

  • ,48 15
  • 15,32
  • 15,32,45
  • ,45 15,32

3 个答案:

答案 0 :(得分:1)

由于你需要在第一个空格之前从一个数字(数字序列)开始删除 line ,你可以使用

s1.replaceAll("(?m)^\\d+\\s.*\r?\n?", "")

或(为了确保我们与换行符不匹配,请将\s替换为[^\S\n]):

 s1.replaceAll("(?m)^\\d+[^\\S\n].*\r?\n?", "")

请参阅regex demo

模式匹配:

  • (?m)^ - 启用多行模式^匹配行开头
  • \\d+ - 一个或多个数字
  • \\s - 一个空格([^\S\n]匹配任何空格但换行)
  • .* - 任何字符,但新行尽可能多
  • \r?\n? - 一个或零\r后跟\n一次或零次。

请参阅Java demo:

String s1 = "1,48 15\n1 15,32\n1 15,32,45\n1,45 15,32";
System.out.println(s1.replaceAll("(?m)^\\d+\\s.*\r?\n?", "")); 

注意如果您有要忽略的前导空格,请使用

^\s*\d+\s.*\r?\n?

请参阅another regex demo

答案 1 :(得分:0)

您可以使用以下模式替换您的行:

String text = 
    "1,48 15"
        + System.getProperty("line.separator")
        + "1 15,32"
        + System.getProperty("line.separator")
        + "1 15,32,45"
        + System.getProperty("line.separator")
        + "1,45 15,32";
//                                  | multi-line pattern flag
//                                  |   | start of line
//                                  |   || one character
//                                  |   ||   | followed by space
//                                  |   ||   |  | etc.
//                                  |   ||   |  |      | replace with empty line
//                                  |   ||   |  |      | 
System.out.println(text.replaceAll("(?m)^.{1}\\s.*?$", ""));

<强>输出

1,48 15


1,45 15,32

答案 2 :(得分:0)

尝试:

System.out.println(text.replaceAll("(?m)\\n^\\d\\s[^\\n]+", ""));

DEMO

输出:

1,48 15
1,45 15,32

它也应该删除空行。