java中的正则表达式,共享符号

时间:2015-06-03 13:27:13

标签: java regex

我试图从字符串中删除短于3个符号的所有单词。我有以下代码

String s = "a abc ab ab ab abc ab";
s = s.replaceAll("(^|\\s)([a-z]{1,2})(\\s|$)", "$1$3");

我运行它,但输出是

 abc  ab  abc 

我认为存在问题是因为3个单词“ab ab ab”共享相同的空格,这就是为什么第二个“ab”不是正则表达式的输入。我怎样才能让它正常工作?

2 个答案:

答案 0 :(得分:1)

使用word boundary \b代替并删除所有太短的字词:

s = s.replaceAll("\\b[a-z]{1,2}\\b", "");

答案 1 :(得分:0)

您可以尝试使用以下正向前瞻性正则表达式。

string.replaceAll("\\s[a-z]{1,2}(?=\\s|$)|^[a-z]{1,2}\\s", "");

DEMO

  • \\s[a-z]{1,2}(?=\\s|$)会匹配一个或两个字母单词以及前面的空格字符。

  • ^[a-z]{1,2}\\s会匹配开头的一两个字母单词以及以下空格。

  • 用空字符串替换匹配的字符将为您提供所需的输出。