如何使用正则表达式删除不需要的空格和字符串的最后一个单词?

时间:2016-08-25 09:24:20

标签: java regex

我有一个字符串,其中包含如下模式中的单词:

  2013-2014  XXX 29 
  2011-2012  XXXX 44

请注意,在年之前和之后有2个空格。 我需要删除前两个空格,一年后的1个空格和最后一个字(29/44等)。 所以它会变成这样:

2013-2014 XXX
2011-2012 XXXX

我对Regex非常不好,所以任何帮助都会受到赞赏。到目前为止,我可以用

删除最后一个单词
str.replaceAll(" [^ ]+$", "");

4 个答案:

答案 0 :(得分:1)

您可以使用单个正则表达式:

str = str.replaceAll("^ +|(?<=\\d{4} ) | [^ ]+ *$", "");

RegEx Demo

RegEx分手:

^ +             # 1 or more spaces at start
|               # OR
(?<=\\d{4} )    # space after 4 digit year and a space
|               # OR
 [^ ]+ *$       # text after last space at end

答案 1 :(得分:1)

仅选择您想要的内容并替换其余内容(中间有空格):) 这应该适合你:

public static void main(String[] args) throws IOException {
    String s1 = "  2013-2014  XXX 29 ";
    System.out.println(s1.replaceAll("^\\s+([\\d-]+)\\s+(\\w+).*", "$1 $2"));

    String s2 = "  2011-2012  XXXX 44 ";
    System.out.println(s2.replaceAll("^\\s+([\\d-]+)\\s+(\\w+).*", "$1 $2"));
}

O / P:

2013-2014 XXX
2011-2012 XXXX

答案 2 :(得分:0)

你也可以通过多个更容易理解的步骤来实现,例如:

public static void main(String[]args){
    String s = "  2011-2012  XXXX 44";
    // Remove leading and trailing whitespace
    s = s.trim();
    System.out.println(s);
    // replace two or more whitespaces with a single whitespace
    s = s.replaceAll("\\s{2,}", " ");
    System.out.println(s);
    // remove the last word and the whitespace before it
    s = s.replaceAll("\\s\\w*$", "");
    System.out.println(s);
}

O / P:

2011-2012  XXXX 44
2011-2012 XXXX 44
2011-2012 XXXX

答案 3 :(得分:0)

你也可以试试这个:

str = str.replaceAll("\\s{2}", " ").trim();

示例:

String str = "  2013-2014  XXX 29 ";

现在:

str.replaceAll("\\s{2}", " ");

输出:" 2013-2014 XXX 29 "

使用.trim()看起来像这样:"2013-2014 XXX 29"