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

如何使用正则表达式将字符串从一种模式转换为另一种模式?

  •  0
  • user811433  · 技术社区  · 12 年前

    我有一个要使用正则表达式转换的字符串:

    AA_BB_CC_DD => EE_BB_FF_DD

    尝试使用类似regex的正则表达式 (AA)(.*)(FF) 。但这并没有奏效。有人能帮忙吗?

    此外,如果你能给我一个好的正则表达式指南,那就太好了。regex的站点太多。不确定该指哪一个。

    2 回复  |  直到 12 年前
        1
  •  2
  •   MikeM    12 年前

    怎么样

    String before = "AA_BB_CC_DD";
    String after = before.replaceFirst("AA(_BB_)CC(_DD)", "EE$1FF$2");
    
    System.out.println(after);
    // EE_BB_FF_DD
    

    您还没有描述输入字符串的形式是如何变化的,因此很难生成合适的正则表达式。

    如果你想在 AA CC 你可以使用 (.*?) 而不是 (_BB_)

    上面显示了在替换字符串中使用由 () ,即。 $1 指第一个中的内容 () $2 第二个 () .

    链接:
    Regular-expressions.info .
    The Java Tutorials. Lesson: Regular Expressions .

        2
  •  1
  •   mki    12 年前

    如果您想要完整的解释,可以在这里查看: http://www.regular-expressions.info/tutorialcnt.html

    当你了解它是如何工作的 Pattern API 足够了。

    以你为例,我认为AA->EE、BB->BB、CC->FF、DD->日 因此,您可以尝试以下操作:

    String before = "AA_BB_CC_DD";
    String after = before.replaceAll("AA_(.*)_CC_(.*)", "EE_$1_FF_$2");
    

    你会得到结果。我解释正则表达式:
    “AA_(.*) 科科斯群岛 (.*)"
    程序试图匹配AA_。表示任何字符,*表示重复。因此,AA_和之间的任何字符串 科科斯群岛 匹配。()表示一个被“记住”的组。

    “EE_1_FF_$2”
    将AA_替换为EE_$1表示打印第一组()。
    FF和2美元也是如此。