代码之家  ›  专栏  ›  技术社区  ›  mpobrien

是否有方法将字符串参数列表与正则表达式(带组)一起使用来构造新字符串?

  •  1
  • mpobrien  · 技术社区  · 15 年前

    例如,我有一个这样的正则表达式:

    "The quick (red|brown|blue|yellow) fox (jumps|leaps) over the lazy (dog|cat)."
    

    这个regex有3个分组组件-如果它与给定的字符串匹配,那么regex API将允许您轻松地提取每个组中的值。

    现在假设我有3个字符串:

    ["red", "leaps","cat"]
    

    如果我们假设regex中不在组内的所有字符都是文本字符- 有没有一种方法可以将这3个字符串中的每一个插入到原始regex的相应组中,从而生成一个输出字符串,该字符串组合了regex的非分组部分?在这种情况下,导致“快速的红狐狸跳过了懒猫。” 最好,不需要有已经匹配regex的字符串。

    我想用Java做这件事,我很确定JavaUTI.ReGEX不支持这一点,但我想可能会有第三方的LIB可以允许这样做。有人能给我指点一下吗?

    2 回复  |  直到 7 年前
        1
  •  1
  •   Josef Pfleger    15 年前

    只要不需要嵌套的捕获组,就可以使用更多的regex来检索文本:

    String[] strings = new String[] { "red", "leaps", "dog" };
    String[] literals = new String("The quick (red|brown|blue|yellow) fox " +
        "(jumps|leaps) over the lazy (dog|cat).").split("(?=[^\\\\])\\(.*?\\)");
    
    StringBuilder sb = new StringBuilder(literals[0]);
    for(int i = 0; i < strings.length; i++) {
        sb.append(strings[i]);
        sb.append(literals[i + 1]);
    }
    
    // => sb.toString();
    
        2
  •  1
  •   ennuikiller    15 年前

    大多数regex实现允许您在搜索和替换中执行类似的操作:

    s/The quick (red|brown|blue|yellow) fox (jumps|leaps) over the lazy (dog|cat)/The quick $1 fox $2 over the lazy $3/