Java正则表达式从句子中删除多次出现的模式

时间:2013-06-06 20:48:16

标签: java regex replaceall

我试图将一个句子传递给一个函数,并在返回之前删除了多次出现的模式。

我的功能看起来像这样......

  public String removeExtraStars(String str){
    String b = str.replaceAll("\\*\\s{2,}", "* ");
    return b;
  }

示例输入是"hi my name is * *" 我想让输出看起来像"hi my name is *" 但它不会这样做。 我在像"my dinner was * * nice"这样的字符串上尝试过它 希望它输出"my dinner was * nice" 但没有任何效果。 有人可以告诉我我做错了什么。 感谢

P.S。我认为最复杂的输出看起来像"* and * and * and *"

2 个答案:

答案 0 :(得分:4)

您需要更改正则表达式,以便不仅搜索*,而且还会搜索空格和其他*

String str = "hi my name is * * * and * is * *";
String b = str.replaceAll("\\*(\\s+\\*)+", "*");

输出:

hi my name is *  and * is * 

答案 1 :(得分:2)

您的正则表达式替换*(星号后跟两个空格),但不是* *。如果我正确地阅读了您的请求,您需要在量词之前进行分组:(\\*\\s){2,},其中“astrisk后跟空格,至少两次”。