java - 未使用 appendReplacement 替换模式

标签 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. 结尾的首字母缩略词后附加一个 #

我应该怎么做?

最佳答案

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

您需要使用它并使用 find 而不是 matches 因为 matches 断言整个字符串与正则表达式匹配。 $ 是字符串的结尾,因此请改用先行。

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

关于java - 未使用 appendReplacement 替换模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32362261/

相关文章:

JavaScript 正则表达式重复(子)组

java - 如何解决 FindBugs 中的 FCBL_FIELD_COULD_BE_LOCAL 问题?

Java 通用设计有效性

regex - 在每一行的开头添加空格数(在一个字符串内)

javascript - 提取两个标记之间的子字符串。第二个 token 可能丢失

JavaScript 正则表达式替换多个字母

cloud - Cloud Foundry 中的 JDK 可用性

reflection - 如何检查一个类是否属于 Java JDK

Java时间转正常格式

asp.net - 在正则表达式中允许-(破折号)