我试图从字符串中删除短于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”不是正则表达式的输入。我怎样才能让它正常工作?
答案 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", "");
\\s[a-z]{1,2}(?=\\s|$)
会匹配一个或两个字母单词以及前面的空格字符。
^[a-z]{1,2}\\s
会匹配开头的一两个字母单词以及以下空格。
用空字符串替换匹配的字符将为您提供所需的输出。