Java正则表达式替换原始字符串中的组值

时间:2014-03-22 05:42:11

标签: java regex replace

我有一个特定的要求,即通过保留模式(分隔符)来查找模式并替换原始字符串中匹配组(2)的值,我正在使用模式

:(\w+)[:\|]+(.*)

使用此模式,它正确解析值,但我无法替换group(2)的值。例如,我有一个多行输入字符串

:20:9405601140
:2D::11298666
:28C:20/1

我想用新值(1234)替换标签20的值(9405601140),所以我期待的输出是

:20:1234
:2D::11298666
:28C:20/1

由于

4 个答案:

答案 0 :(得分:1)

使用这个:

input = input.replaceAll("(:20):(\\d+)(?!\\d)", "$1:1234");

此处(\\d+)(?!\\d)正在检查数字after the :20:是否后跟数字。

但是,如果您只想在此处替换:20:9405601140,那么这很简单:

input = input.replaceAll(":20:9405601140(?!\\d)", ":20:1234");

答案 1 :(得分:0)

如何以相反的方式做到这一点。

创建一个这样的模式(:(\w+)[:\|]+)(.*)然后为每一行输出第一组和你的替换(而不是组2)。

以下是一个工作示例http://ideone.com/9TkGx6

答案 2 :(得分:0)

您可以通过捕获要保留的内容而不是要替换的内容,然后在替换字符串中使用反向引用($1作为第一个捕获组)来将其包含在最后结果。

类似的东西:

string.replaceAll("(:\\w+[:\\|]+).*", "$11234")

要在所有给定的行上执行替换,或者只是:

string.replaceAll("(:20[:\\|]+).*", "$11234")

仅在以":20"。

开头的行上执行替换

答案 3 :(得分:0)

试试这个

s = s.replaceAll("\\A(?::[:\\|])\\w+", "1234");