我有一个特定的要求,即通过保留模式(分隔符)来查找模式并替换原始字符串中匹配组(2)的值,我正在使用模式
:(\w+)[:\|]+(.*)
使用此模式,它正确解析值,但我无法替换group(2)的值。例如,我有一个多行输入字符串
:20:9405601140
:2D::11298666
:28C:20/1
我想用新值(1234)替换标签20的值(9405601140),所以我期待的输出是
:20:1234
:2D::11298666
:28C:20/1
由于
答案 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");