删除标点符号(保留字母数字和 unicode)Java

Remove Punctuation Characters (keep alphanumeric and unicode) Java

尝试删除所有标点字符但保留语言所需的所有字母数字和其他类似 unicode 类型的字符(即不是数学符号)。例如:

test1string                =>     test1string
test2-string               =>     test2string
test.3!string              =>     test3string
тестовоезадание!строка.    =>     тестовоезаданиестрока
String               =>     String

可以根据需要想出更多的例子来澄清问题。当前使用 [\w\p{l}]+ 来允许所需的值,但它会将许多字符转换为 ?

我建议使用

text.replaceAll("[\p{P}\p{S}]+|[\p{L}&&[^\x00-\x{FFFF}]]+", "")

详情

  • [\p{P}\p{S}]+ - 1 个或多个标点符号
  • | - 或
  • [\p{L}&&[^\x00-\x{FFFF}]]+ - 1 个或多个非 BMP 平面中定义的字母。

看到一个Java demo:

String text = "test1string\ntest2-string\ntest.3!string\nтестовоезадание!строка.\nString";
System.out.println(text.replaceAll("[\p{P}\p{S}]+|[\p{L}&&[^\x00-\x{FFFF}]]+", ""));

输出:

test1string
test2string
test3string
тестовоезаданиестрока
String