使用appendReplacement不替换模式

时间:2015-09-02 20:11:54

标签: java regex

public static void main(String[] args) {
        Pattern p = Pattern.compile("((?:[a-zA-Z]\\.)+[s]$)");
        Matcher m = p.matcher("u.s.a. u.s s.w.a.t u.t.");
        StringBuffer sb = new StringBuffer();
        while (m.find()) {
            m.appendReplacement(sb, "$0\\#");
        }
        m.appendTail(sb);
        System.out.println(sb.toString());
    }

此处u.s应由u.s#替换,但不会替换它。在我的应用程序中,我需要附加以ss.结尾的任何首字母缩写词#

我该怎么做?

1 个答案:

答案 0 :(得分:1)

"((?:[a-zA-Z]\\.)+s\\.?(?=\\s|$))"

你需要使用它并使用find代替matches,因为matches断言整个字符串与正则表达式匹配。 $是字符串的结尾,所以请改用lookahead。

https://regex101.com/r/cT0hV4/1