在Java中,如何替换除第一个实例之外的所有字符实例?

在Java中,如何替换除第一个实例之外的所有字符实例?,java,regex,Java,Regex,在Java中,如果试图找到一个正则表达式来匹配除第一个实例之外的特定字符(:)的所有实例,则希望将除第一个以外的所有实例都替换为零 我能做到 Pattern p = Pattern.compile(":"); Matcher m = p.matcher(input); String output = m.replaceAll(""); 还有m.replaceFirst(),但我想替换除first之外的所有内容。天真的方法: String[] parts = str.split(":", 2)

在Java中,如果试图找到一个正则表达式来匹配除第一个实例之外的特定字符(:)的所有实例,则希望将除第一个以外的所有实例都替换为零

我能做到

Pattern p = Pattern.compile(":");
Matcher m =  p.matcher(input);
String output = m.replaceAll("");
还有m.replaceFirst(),但我想替换除first之外的所有内容。

天真的方法:

String[] parts = str.split(":", 2);
str = parts[0] + ":" + parts[1].replaceAll(":", "");
你可以使用reg-ex

String str1 = "A:B:C:D:E:F:G:H:I:J:K:L:M";
str1= str1.replaceAll("([:|_].*?):", "$1_");
str1= str1.replaceAll("([:|_].*?):", "$1_");

在这里,我不能修改正则表达式以使输出首先替换自身。实际上,第一个replaceAll会将“:”替换为替换位置中的“u”

对于正则表达式替换,使用匹配模式
\G((?!^)。*?[^:*:*?:*)
作为替换,使用第一组
$1


请参阅并测试Perl中的正则表达式代码。

投票决定是否“太本地化”或“不是一个真正的问题”,两者之间的差距很小。由于你没有问任何问题,很难判断它是否是“真实的”。提示:indexOf,substring好的,我添加了我所做的我知道这似乎是一个简单的问题,但我看不到答案。抱歉,我不太理解你在正则表达式后的评论。在上面的代码中,所有“:”都替换为“u”,除了你要查找的第一个之外。为了实现这一点,您需要调用replaceAll函数两次。这就回答了你的问题。我只是想说,我正在寻找更好的正则表达式,它将首先替换它自己的字符串name=“1_2_3_4_5”;int index=name.indexOf(“”);System.out.println(name.substring(0,索引)+name.substring(索引+1).replace(“,“#”);看起来像是最整洁的答案。有人标记了此答案的长度/内容。可能是因为它是一个只包含代码的答案。
public static void main(String[] args) {
    String name ="1_2_3_4_5";
    int index = name.indexOf("_");
    String name1 = name.substring(index+1); 
    name1 = name1.replace("_", "#");

    System.out.println(name.substring(0,index+1)+ name1);
}
if (matcher.find()) {
    String start = originalString.substring(0, matcher.end());
    matcher.reset(originalString.substring(matcher.end(), originalString.length()));
    replacedString = start + matcher.replaceAll("");
}