[] 表示一个字符类。 [[.]] 最终只匹配 .,尽管在您的情况下外部 [] 是不必要的(和/或您可以使用 \ 代替)。
要删除后跟数字的.,请匹配. 和\d+(一位或多位数字)。因为. 表示“任何字符”,所以您必须转义它(\. 或[.] 工作)。因为\ 在字符串文字中具有特殊含义,所以正则表达式的任何反斜杠也需要转义(使用另一个反斜杠)。所以:
value = value.replaceAll("\\.\\d+", "");
// Or: value = value.replaceAll("[.]\\d+", "");
// Or: value = value.replaceAll("[.][0-9]+", ""); (avoiding backslashes entirely)
如果您只想在一个数字之后执行此操作(而不是在“Blah .123”中),您可以在开头添加 positive lookbehind 以要求一个数字:
value = value.replaceAll("(?<=\\d)\\.\\d+", "");
// Or: value = value.replaceAll("(?<=\\d)[.]\\d+", "");
// Or: value = value.replaceAll("(?<=\\d)[.][0-9]+", ""); (avoiding backslashes entirely)
Pattern documentation 中描述了这些不同的功能。
示例 (live copy):
class Example
{
public static void main (String[] args) throws java.lang.Exception
{
String value = "Testing 3.14 testing 2.45534 testing .123 testing";
System.out.println(value.replaceAll("\\.\\d+", ""));
System.out.println(value.replaceAll("[.]\\d+", ""));
System.out.println(value.replaceAll("[.][0-9]+", ""));
value = "Testing 3.14 testing 2.45534 testing .123 testing";
System.out.println(value.replaceAll("(?<=\\d)\\.\\d+", ""));
System.out.println(value.replaceAll("(?<=\\d)[.]\\d+", ""));
System.out.println(value.replaceAll("(?<=\\d)[.][0-9]+", ""));
}
}
输出:
测试 3 测试 2 测试 测试
测试 3 测试 2 测试 测试
测试 3 测试 2 测试 测试
测试 3 测试 2 测试 .123 测试
测试 3 测试 2 测试 .123 测试
测试 3 测试 2 测试 .123 测试
注意后三个没有替换.123,因为它前面没有数字。前三个做到了。