如何使用java正则表达式识别字符的第四次出现
我有两条像这样的线如何使用java正则表达式识别字符的第四次出现,java,regex,string,Java,Regex,String,我有两条像这样的线 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") 它与第一根弦配合得很好。但是对于
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以上的XYZ。
注意:每个分号之间的数据长度是可变的。有人能帮我吗
提前谢谢。这是因为
*
中的
匹配任何字符,包括代码>
将
替换为[^;]
以匹配除以外的任何字符
,并在开头添加一个^
,以强制从一开始匹配字符串
:
data.replaceAll("^((([^;]*?);){5})XYZ", "$1ABC")
您需要指定表示起点的锚点^
正则表达式:
^((?:[^;]*;){5})XYZ
替换字符串:
$1ABC
输出:
aisozp;ak apso;; ;pasix acd;ABC;ao aoz;; ;aixi o oiz
aisozp;ak apso;;XYZ;pasix acd;098;ao aoz;; ;XYZ; as oiz
FWIW,您可能希望使内部组不被捕获。非常感谢您的帮助非常感谢您的帮助
aisozp;ak apso;; ;pasix acd;ABC;ao aoz;; ;aixi o oiz
aisozp;ak apso;;XYZ;pasix acd;098;ao aoz;; ;XYZ; as oiz