0

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

AA_BB_CC_DD=>EE_BB_FF_DD

尝试使用正则表达式,例如(AA)(.*)(FF). 但这没有用。有人可以帮忙吗?

如果您能给我指出一个好的正则表达式指南,那就太好了。正则表达式的站点太多。不知道该参考哪个。

4

2 回答 2

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

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

如果您想允许介于AAand之间的几乎任何东西,CC您可以使用(.*?)而不是(_BB_)etc。

上面展示了在替换字符串中使用被捕获的内容的原理(),即$1引用第一个()$2第二个中的内容()

链接:
正则表达式.info
Java 教程。课程:正则表达式

于 2013-04-20T14:56:52.780 回答
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 美元也一样。

于 2013-04-20T16:17:06.240 回答