删除非字母数字但保留拉丁字符

时间:2016-11-18 11:13:06

标签: java regex

从输入字符串中我想摆脱非字母数字字符(:-等),但保留拉丁字符。同时将空格" "替换为"-"

这是我的尝试,但我不知道如何维护拉丁字符。

String title ="NEYÑO: HOW ARE YÓU MATE";
title = title.replaceAll("[^A-Za-z0-9 ]", "").replace(" ", "-").toLowerCase();
System.out.println(title);

输出:

neyo-how-are-yu-mate

期望的输出:

neyño-how-are-yóu-mate

提前致谢

2 个答案:

答案 0 :(得分:3)

使用[^\p{Alnum}\s]+Pattern.UNICODE_CHARACTER_CLASS选项保留所有Unicode字母和数字:

String title ="NEYÑO: HOW ARE YÓU MATE";
title = title.replaceAll("(?U)[^\\p{Alnum}\\s]+", "").replace(" ", "-").toLowerCase();
System.out.println(title); // => neyño-how-are-yóu-mate

请参阅Java demo

<强>详情:

答案 1 :(得分:3)

您还可以使用\p{IsLatin} character property检测Java中的拉丁字符:

String title ="NEYÑO: HOW ARE YÓU MATE";
title = title.replaceAll("(?!\\p{IsLatin})[^A-Za-z0-9 ]", "").replace(" ", "-").toLowerCase();
System.out.println(title);

//=> neyño-how-are-yóu-mate

(?!\\p{IsLatin})[^A-Za-z0-9 ]将匹配任何非拉丁字符的非字母数字或空格字符。