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

时间:2013-04-20 01:30:16

标签: java regex converter

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

AA_BB_CC_DD => EE_BB_FF_DD

尝试使用像(AA)(.*)(FF)这样的正则表达式。但那没用。有人可以帮忙吗?

如果你能指出一个好的正则表达式指南,那也很好。正则表达式的网站太多了。不知道该推荐哪一个。

2 个答案:

答案 0 :(得分:2)

怎么样

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

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

如果您想在AACC之间允许几乎所有内容,则可以使用(.*?)代替(_BB_)等。

以上显示了在替换字符串中使用()捕获的内容的原则,即$1指的是第一个()中的内容,{{1第二个$2

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

答案 1 :(得分:1)

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

当您了解它的工作原理时,Pattern API就足够了。

对于你的例子,我想AA - > EE,BB - > BB,CC - > FF,DD - > DD 所以你可以尝试以下方法:

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

你得到的结果。我解释正则表达式:
“AA _(。*) CC (。*)”
该程序试图匹配AA_ ,.表示任何字符,*表示重复它。因此,AA_和 CC 之间的任何字符串都匹配。 ()表示“记忆”的组。

“EE_ $ 1_FF_ $ 2”
AA_替换为EE_。 $ 1表示打印第一组()。
FF和$ 2相同。