我有两个字符串,如
aisozp;ak apso;; ;pasix acd;XYZ;ao aoz;; ;aixi o oiz
aisozp;ak apso;;XYZ;pasix acd;098;ao aoz;; ;XYZ; as oiz
这里我需要用ABC替换字符串XYZ,只有当它存在于第5和第6分号(;)之间时。 我尝试了以下方法来实现这个目标
data.replaceAll("(((.*?);){5})XYZ", "$1ABC")
第一个字符串工作正常。但对于第二个字符串,它将替换字符串XYZ(最后一次出现),后面没有第5个分号。这里如何将搜索限制为5.以上正则表达式试图匹配分号5及以上的XYZ我猜。 注意:每个分号之间的数据长度是可变的。有人可以帮我吗?
提前致谢。
答案 0 :(得分:5)
这是因为.
中的.*
匹配任何字符,包括;
。
将.
替换为[^;]
以匹配;
以外的任何字符,并在开头添加^
,以强制匹配{{1}从一开始:
String
答案 1 :(得分:2)
您需要指定锚^
,它表示起点。
正则表达式:
^((?:[^;]*;){5})XYZ
替换字符串:
$1ABC
String s = " aisozp;ak apso;; ;pasix acd;XYZ;ao aoz;; ;aixi o oiz\n" +
" aisozp;ak apso;;XYZ;pasix acd;098;ao aoz;; ;XYZ; as oiz";
String m = s.replaceAll("^((?:[^;]*;){5})XYZ", "$1ABC");
System.out.println(m);
输出:
aisozp;ak apso;; ;pasix acd;ABC;ao aoz;; ;aixi o oiz
aisozp;ak apso;;XYZ;pasix acd;098;ao aoz;; ;XYZ; as oiz