【发布时间】:2017-10-27 00:51:22
【问题描述】:
我有这样的字符串:
−+-~*/@$^#¨%={}[häagen-dazs;:] a (le & co') jsou "výborné" <značky>?!.
我想结束这个:
häagen-dazs a le & co jsou výborné značky.
与How to filter string for unwanted characters using regex? 相比,我想在字符串中保留重音(变音符号)。
我使用以下 replaceAll:
str.replaceAll("[¨%=;\\:\\(\\)\\$\\[\\]\\{\\}\\<\\>\\+\\*\\−\\@\\#\\~\\?\\!\\^\\'\\\"\\|\\/]", "");
- 这是正确的方法吗?
- 有没有更简单的方法可以只保留字母数字字符(以及带重音符号)、空格和 & 。 - 符号?
【问题讨论】:
-
@Tushar 该正则表达式会删除变音字母。
-
试试
replaceAll("(?U)[^\\p{L}\\p{N}\\s&.-]", "") -
这是一个demo 使用 Wiktor 的评论。
-
使用
CharMatcher.javaLetterOrDigit().or(CharMatcher.anyOf(" &-.")).retainFrom(yourInput)你最终会得到-häagen-dazs a le & co jsou výborné značky.(CharMatcher来自番石榴,NB:& 之前有一个空格) -
@Michal:但是将每个字符与正则表达式匹配是过分的。如果该解决方案有效,您真的只需要
s.replaceAll("[^a-zA-Z& _.ýčéèêàâùû-]", "")。大写的ýčéèêàâùû呢?我认为你不应该接受这个答案,我会发布我的。
标签: java regex string char special-characters