如何替换多个匹配的正则表达式

时间:2015-12-09 14:05:59

标签: java regex string

我有一组需要应用于一组String的正则表达式替换,

例如:

  1. 所有多个空格,包含单个空格("\s{2,}" --> " ")
  2. 全部。然后是一个char。其次是空格,后跟char (\.([a-zA-Z]-->". $1")
  3. 所以我会有这样的事情:

    String s="hello     .how are you?";
    s=s.replaceAll("\\s{2,}"," ");
    s=s.replaceAll("\\.([a-zA-Z])",". $1");
    ....
    

    它有效,但想象一下,我试图在长字符串上替换100多个这样的表达式。不用说这可能有多慢。

    所以我的问题是,是否有更有效的方法可以使用单个replaceAll(或类似的东西,例如Pattern / Matcher)来推广这些替换

    我已关注Java Replacing multiple different...

    但问题是我的正则表达式不是simple Strings

2 个答案:

答案 0 :(得分:4)

您有两个replaceAll来电:

s = s.replaceAll("\\s{2,}"," ");
s = s.replaceAll("\\.([a-zA-Z])",". $1");

您可以将它们组合成一个replaceAll,如下所示:

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

RegEx Demo

答案 1 :(得分:1)

查看Replace multiple substrings at Once并进行修改。

使用echo ($result);

  • 组号为整数键
  • Lambdas作为值

修改循环以检查匹配的组。然后使用该组号获取替换lambda。

伪码

Map<Integer, Function<Matcher, String>>