如何在单个正则表达式java中替换除最后一次出现以外的所有出现和除(a-zA-Z0-9)之外的字符

时间:2018-05-24 08:21:46

标签: java regex string

我有test.e$xamp[le.test.csv

之类的字符串

我需要输出test_e_xamp_le_test.csv

现在,我想使用正则表达式替换.以外的所有.次出现以及除a-zA-Z0-9之外的字符出现_

目前我正在使用以下正则表达式,但它将所有.次出现替换为_

str = str.replaceAll("[^a-zA-Z0-9.]", "_");

是否可以在单个正则表达式中实现这两个条件?

2 个答案:

答案 0 :(得分:5)

您可以使用正则表达式\\.(?=.*\\.)

样品:

String str = "test.example.test.csv".replaceAll("\\.(?=.*\\.)", "_");
System.out.println(str);

输出:

test_example_test.csv

答案 1 :(得分:1)

您也可以使用正则表达式来寻找像这样的解决方案,其中拆分重新组合中间字符串:

String input = "test.example.test.csv";
String[] tmp = input.split("\\P{Alnum}");
StringBuilder sb = new StringBuilder();
String del = "";
for (int i = 0; i < tmp.length - 1; i++) {
    sb.append(del).append(tmp[i]);
    del = "_";
}
sb.append(".").append(tmp[tmp.length - 1]);

System.out.println(sb.toString());

<强>输出:

test_example_test.csv
相关问题