繁体   English   中英

我需要一个正则表达式来替换第三个匹配的子字符串

[英]I need a regular expression to replace 3rd matching substring

input: abc def abc abc pqr

我想用xyz替换第三位置的abc。

output: abc gef abc xyz pqr

提前致谢

一种方法是使用。

String[] mySplitStrings = null;
String.Split(" ");
mySplitString[3] = "xyz";

然后重新加入字符串,这不是最好的方法,但是可以工作,您可以将整个过程放入类似的函数中。

string ReplaceStringInstance(Seperator, Replacement)
{
  // Do Stuff
}

将三个部分分组,分别是替换字符串,替换字符串和其余部分之前的部分,并组合前缀,替换和后缀:

String pattern = String.format("^(.*?%1$s.*?%1$s.*?)(%1$s)(.*)$", "abc");
String result = input.replaceAll(pattern, "$1xyz$3");

该解决方案假定整个输入为一行。 如果您有多行输入,则必须替换点,因为它们与行分隔符不匹配。

有很多方法可以做到这一点,但这是其中一种。 它假定字母组将由空格分隔,并寻找第三个“ abc”块。 然后,它将执行一次替换,以将其替换为“ xyz”。

import java.util.regex.Pattern;
import java.util.regex.Matcher;

public class main {
    private static String INPUT = "abc def abc abc pqr";
    private static String REGEX = "((?:abc\\ ).*?(?:abc\\ ).*?)(abc\\ )";
    private static String REPLACE = "$1xyz ";

    public static void main(String[] args) {
        System.out.println("Input: " + INPUT);
        Pattern p = Pattern.compile(REGEX);
        Matcher m = p.matcher(INPUT); // get a matcher object
        INPUT = m.replaceFirst(REPLACE);
        System.out.println("Output: " + INPUT);
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM