我有test.e$xamp[le.test.csv
我需要输出test_e_xamp_le_test.csv
现在,我想使用正则表达式替换.
以外的所有.
次出现以及除a-zA-Z0-9
之外的字符出现_
。
目前我正在使用以下正则表达式,但它将所有.
次出现替换为_
str = str.replaceAll("[^a-zA-Z0-9.]", "_");
是否可以在单个正则表达式中实现这两个条件?
答案 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