【问题标题】:regexp to capitalize every first letter of every word and ignore some正则表达式将每个单词的每个首字母大写并忽略一些
【发布时间】:2017-04-10 01:28:01
【问题描述】:

大家好,我如何创建一个正则表达式来大写每个单词的每个首字母并忽略一些单词,例如:dos、de、da。

我想要这样的字符串:“TEMporADA DOS TECNologoS”

成为:“Temporada dos Tecnologos”。

谢谢

【问题讨论】:

  • 你有所有你想忽略的单词的列表吗?这不是您可以为...定义一套或一般规则的东西。
  • regex 可能不是特别需要,你可以有一个string[] 要忽略的单词,然后将给定的字符串 ("Temporada dos Tecnologos") 拆分为这种情况下,按空格。然后您可以将它们全部设置为小写,然后检查每个单词是否在数组中,如果不是,您可以将第一个字母设置为大写。在此之后,您可以使用空格将它们全部加入,瞧
  • 你能说小于3长度的单词保证以小写开头吗?
  • 要忽略的词是:do、de、dos、das、e
  • 好吧,您并没有忽略dos,因为您已将DOS 修改为dos。适用什么规则?

标签: c# regex


【解决方案1】:

不需要正则表达式。您可以先使用TextInfo.ToTitleCase,然后在“ignore”-words 上应用小写规则(您已将 DOS 更改为 dos):

string text = "TEMporADA DOS TECNologoS";
string[] ignoreWords = {"dos", "de", "da"};

text = System.Globalization.CultureInfo.CurrentCulture.TextInfo.ToTitleCase(text); // uppercase first letter all
var newWords = text.Split()
    .Select(w => ignoreWords.Contains(w, StringComparer.OrdinalIgnoreCase) 
                   ? Char.ToLower(w[0]) + w.Substring(1) 
                   : w);
text = String.Join(" ", newWords);

【讨论】:

  • 和我写的差不多,+1
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-11-10
  • 2020-08-30
  • 1970-01-01
  • 2015-11-04
  • 2012-11-11
  • 2012-07-24
相关资源
最近更新 更多