我有一个字符串,其中包含如下模式中的单词:
2013-2014 XXX 29
2011-2012 XXXX 44
请注意,在年之前和之后有2个空格。 我需要删除前两个空格,一年后的1个空格和最后一个字(29/44等)。 所以它会变成这样:
2013-2014 XXX
2011-2012 XXXX
我对Regex非常不好,所以任何帮助都会受到赞赏。到目前为止,我可以用
删除最后一个单词str.replaceAll(" [^ ]+$", "");
答案 0 :(得分:1)
您可以使用单个正则表达式:
str = str.replaceAll("^ +|(?<=\\d{4} ) | [^ ]+ *$", "");
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"