如何在titlecase条件中用引号引起来的非小写字符串

时间:2018-11-04 10:04:48

标签: c# title-case

在我的文章标题中,我使用CultureInfo.CurrentCulture.TextInfo.ToTitleCase(str.ToLower());,但我认为在双引号后面不起作用。至少对于土耳其语来说。

例如,文章标题如下:

  

KİRAPARASININÖDENMEMESİNEDENİYLEYAPILAN“İLAMSIZTAHLİYE”   TAKİPLERİNDE“TAKİPTALEBİ”NİNİÇERİĞİ。

使用了像这样的方法之后:

private static string TitleCase(this string str)
{
   return CultureInfo.CurrentCulture.TextInfo.ToTitleCase(str.ToLower());
}

var art_title = textbox1.Text.TitleCase();返回

  

KiraParasınınÖdenmemesiNedeniyleYapılan“İlamsızTahliye”   Takiplerinde“ Takip Talebi” Ninİçeriği。

问题在这里。因为它必须是这样的:

  

...“ Takip Talebi” nin ...

但它是这样的:

  

...“ Takip Talebi” Nin ...

此外,在MS Word中,当我单击“启动Word初始费用”时,它的变化方式就是这样

  

...“ Takip Talebi” Nin ...

但这是绝对错误的。我该如何解决这个问题?

编辑:首先,我从空白处删去句子,得到单词。如果单词包含双引号,它将得到一个小写字符串,直到第二个双引号之后的第一个空格为止。这是想法:

private static string _TitleCase(this string str)
{
    return CultureInfo.CurrentCulture.TextInfo.ToTitleCase(str.ToLower());
}
public static string TitleCase(this string str)
{
    var words = str.Split(' ');
    string sentence = null;
    var i = 1;
    foreach (var word in words)
    {
        var space = i < words.Length ? " " : null;
        if (word.Contains("\""))
        {
            // After every second quotes, it would get a lowercase string until the first space after the second double quote... But how?
        }
        else
            sentence += word._TitleCase() + space;
        i++;
    }
    return sentence?.Trim();
}

编辑-3小时后2::9小时后,我找到了解决问题的方法。我相信这绝对不是科学的。请不要为此谴责我。如果整个问题都是双引号,那么在将其发送到ToTitleCase之前,我将其替换为我认为是唯一的数字或土耳其语中未使用的字母,例如alpha,beta,omega等。在这种情况下,ToTitleCase可以毫无问题地实现标题转换。然后,我在返回时间中用双引号替换数字或未使用的字母。这样就实现了目的。如果您有程序化或科学的解决方案,请在此处共享。

这是我的非编程解决方案:

public static string TitleCase(this string str)
{
    str = str.Replace("\"", "9900099");
    str = CultureInfo.CurrentCulture.TextInfo.ToTitleCase(str.ToLower());
    return str.Replace("9900099", "\"").Trim();
}

var art_title = textbox1.Text.TitleCase();

结果:

  

KiraParasınınÖdenmemesiNedeniyleYapılan“İlamsızTahliye” Takiplerinde“ Takip Talebi” ninİçeriği

2 个答案:

答案 0 :(得分:1)

实际上,Microsoft文档ToTitleCase声明ToTitleCase(至少当前)在语言上不正确。实际上,正确地做到这一点真的很难(请参阅出色的Michael Kaplan的这些博客文章:Sometimes, uppercasing sucks"Michael, why does ToTitleCase suck so much?")。

我不知道任何提供语言正确版本的服务或库。

因此-除非您想花很多精力-否则您可能不得不忍受这种不准确性。

答案 1 :(得分:0)

您可以使用RegEx查找撇号或引号字符,并替换其后的字符。

单引号

Regex.Replace(str, "’(?:.)", m => m.Value.ToLower());

Regex.Replace(str, "'(?:.)", m => m.Value.ToLower());