我正在寻找一个函数来转换一个字符串的文本是在UpperCase到SentenceCase。我能找到的所有示例都将文本转换为TitleCase。
一般意义上的
句子大小写描述了在句子中使用大写的方式。句子大小写还描述了英语句子的标准大小写,即句子的第一个字母是大写的,其余的是小写的(除非出于特定原因需要大写,例如专有名词、首字母缩写等)。
有人能告诉我SentenceCase的脚本或函数的方向吗?
发布于 2010-06-29 22:09:41
.NET中没有内置任何东西-但是,这是正则表达式处理实际上可能工作得很好的情况之一。我首先将整个字符串转换为小写,然后,作为第一个近似值,您可以使用正则表达式查找所有序列,如[a-z]\.\s+(.)
,并使用ToUpper()
将捕获的组转换为大写。RegEx
类有一个重载的Replace()
方法,该方法接受MatchEvaluator
委托,该委托允许您定义如何替换匹配值。
这是一个工作中的代码示例:
var sourcestring = "THIS IS A GROUP. OF CAPITALIZED. LETTERS.";
// start by converting entire string to lower case
var lowerCase = sourcestring.ToLower();
// matches the first sentence of a string, as well as subsequent sentences
var r = new Regex(@"(^[a-z])|\.\s+(.)", RegexOptions.ExplicitCapture);
// MatchEvaluator delegate defines replacement of setence starts to uppercase
var result = r.Replace(lowerCase, s => s.Value.ToUpper());
// result is: "This is a group. Of uncapitalized. Letters."
这可以通过许多不同的方式进行改进,以更好地匹配更广泛的句型(不仅仅是那些以letter+period结尾的句型)。
发布于 2010-06-29 22:11:48
这对我很有效。
/// <summary>
/// Converts a string to sentence case.
/// </summary>
/// <param name="input">The string to convert.</param>
/// <returns>A string</returns>
public static string SentenceCase(string input)
{
if (input.Length < 1)
return input;
string sentence = input.ToLower();
return sentence[0].ToString().ToUpper() +
sentence.Substring(1);
}
发布于 2013-04-04 19:23:43
有一个内置的ToTitleCase()
函数,将来将扩展为支持多个区域性。
来自MSDN的示例:
using System;
using System.Globalization;
public class Example
{
public static void Main()
{
string[] values = { "a tale of two cities", "gROWL to the rescue",
"inside the US government", "sports and MLB baseball",
"The Return of Sherlock Holmes", "UNICEF and children"};
TextInfo ti = CultureInfo.CurrentCulture.TextInfo;
foreach (var value in values)
Console.WriteLine("{0} --> {1}", value, ti.ToTitleCase(value));
}
}
// The example displays the following output:
// a tale of two cities --> A Tale Of Two Cities
// gROWL to the rescue --> Growl To The Rescue
// inside the US government --> Inside The US Government
// sports and MLB baseball --> Sports And MLB Baseball
// The Return of Sherlock Holmes --> The Return Of Sherlock Holmes
// UNICEF and children --> UNICEF And Children
虽然它通常是有用的,但它有一些重要的限制:
通常,标题大小写将单词的第一个字符转换为大写,将其余字符转换为小写。然而,此方法当前不提供适当的大小写来转换完全大写的单词,例如首字母缩写词。下表显示了该方法呈现多个字符串的方式。
...the ToTitleCase
方法提供了任意的大小写行为,该行为不一定在语言上是正确的。语言上正确的解决方案需要额外的规则,而当前的算法在某种程度上更简单和更快。我们保留在将来使此API变慢的权利。
来源:http://msdn.microsoft.com/en-us/library/system.globalization.textinfo.totitlecase.aspx
https://stackoverflow.com/questions/3141426
复制相似问题