删除标点符号(保留字母数字和 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
尝试删除所有标点字符但保留语言所需的所有字母数字和其他类似 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