1

我正在寻找一种比较字符串值的方法,其中字符串中的某些字符可能是标点符号,例如éor ô,但是应该忽略标点符号。例如,在搜索名称列表时,用户可能会提供Rene与列表条目匹配Rene的标准René(即 ASCII 101 和 233 应被视为同一事物)。

谢谢

编辑:最好跨越所有 UNICODE 字符。我想可以[应该?]为此实施一些自定义解决方案;我只是想知道是否已经存在某些东西-几乎就像Char.GetBaseCharacterFromPunctuatedCharacter(char):P

4

1 回答 1

1

您没有说您使用的是哪种语言,所以我使用 java 回答。其他语言也有类似的结构。另外,您的意思是变音符号,而不是标点符号(.,?!...)

collat ​​or类支持比较的强度。例如,对于捷克语,变音符号的差异被认为是次要差异。

或者,您可能希望通过 unicode 规范分解(将所有字符分解为基本字母 + 变音符号)删除任何变音符号,然后通过简单的正则表达式删除变音符号(有关 的解释,请参阅此 SO 问题InCombiningDiacriticalMarks)。在java中:

public static String removeDiacritics(String str) {
  return Normalizer
     .normalize(string, Form.NFD)   // decompose into letters+diacritics
     .replaceAll("\\p{InCombiningDiacriticalMarks}+", ""); // remove diacritics
}
于 2013-07-31T09:27:43.493 回答