0

在 Java 中,试图找到一个正则表达式,该表达式将匹配除第一个实例之外的特定字符 (:) 的所有实例,想要将除第一个实例之外的所有实例替换为空。

我可以做这个,

Pattern p = Pattern.compile(":");
Matcher m =  p.matcher(input);
String output = m.replaceAll("");

还有 m.replaceFirst() 但我想先替换所有内容。

4

5 回答 5

5

天真的方法:

String[] parts = str.split(":", 2);
str = parts[0] + ":" + parts[1].replaceAll(":", "");
于 2012-06-29T11:07:18.720 回答
1

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

在此处查看并测试 Perl 中的正则表达式代码。

于 2012-06-29T11:39:24.873 回答
1
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);
}
于 2012-06-29T11:39:58.637 回答
0

您可以使用 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 确实在备用位置用 '_' 替换 ':'。

于 2012-06-29T11:33:46.953 回答
0
if (matcher.find()) {
    String start = originalString.substring(0, matcher.end());
    matcher.reset(originalString.substring(matcher.end(), originalString.length()));
    replacedString = start + matcher.replaceAll("");
}
于 2014-05-29T07:32:52.180 回答