我有一个我想用正则表达式转换的字符串:
AA_BB_CC_DD
=> EE_BB_FF_DD
尝试使用像(AA)(.*)(FF)
这样的正则表达式。但那没用。有人可以帮忙吗?
如果你能指出一个好的正则表达式指南,那也很好。正则表达式的网站太多了。不知道该推荐哪一个。
答案 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
您还没有描述输入字符串的形式如何变化,因此很难生成合适的正则表达式。
如果您想在AA
和CC
之间允许几乎所有内容,则可以使用(.*?)
代替(_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相同。