【问题标题】:How can I do String.StartsWith ignoring diacritics/accents/tildes? [duplicate]忽略变音符号/重音符号/波浪线,我该如何做 String.StartsWith? [复制]
【发布时间】:2020-06-09 10:17:18
【问题描述】:

标题几乎可以解释自己,但假设我有这个:

string str1 = "microondas";
string str2 = "micrómetro";
bool comparison1 = str1.StartsWith("micro", StringComparison.InvariantCultureIgnoreCase);
bool comparison2 = str2.StartsWith("micro", StringComparison.InvariantCultureIgnoreCase);

但是,compare2 将返回 false。有没有一种简单的方法可以让它忽略变音符号、重音符号和波浪线(所以 ó 变成 o,ñ 变成 n)?如果它也不区分大小写,则奖励。

我知道有 CompareOptions.IgnoreNonSpace 可以满足我的要求,但我还没有找到在 StartsWith 中实现它的方法。 任何帮助表示赞赏!

【问题讨论】:

  • 嗯,'ó' 和 'o' 是两个不同的字符
  • 这能回答你的问题吗? Ignoring accented letters in string comparison
  • @MasoudKeshavarz String.Compare 无法回答它是否 StartsWith 的东西,并且 String.IndexOf 没有所需的重载。
  • @GSerg 我只是说 PO 可以使用链接中提供的 RemoveDiacritics 函数。请看我的回答。
  • Those do NOT answer my question at all! - 你显然没有看过副本。 accepted answer 的第一行是,您可以使用适当的 CompareInfo,然后使用 CompareInfo.IndexOf(string, string, CompareOptions) 并根据 -1 检查结果。在您的情况下,您需要根据 0 检查结果。IndexOf 为零表示它以字符串开头。

标签: c#


【解决方案1】:

您可以尝试使用System.Globalization.CompareInfo.IsPrefix 方法,该方法接受CompareOptions 枚举。请参阅docs here

除此之外,您可以尝试基于例如this answer 为自己手动实现它,它处理从字符串中删除变音符号。

【讨论】:

  • 非常感谢。这非常有效。我最终使用了 CompareOptions.IgnoreNonSpace | CompareOptions.IgnoreCase 并做了我想要的!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-12-09
  • 2012-06-22
  • 1970-01-01
  • 2011-12-09
  • 2023-03-24
  • 2010-09-13
  • 1970-01-01
相关资源
最近更新 更多