希望标题能说明一切,但是我希望大写这个字符串中第一个和最后一个单词的第一个字母,如下所示:
Turn this:
this is a regular sentence
Into this:
This is a regular Sentence
理想情况下,我希望它可以处理任何字符,例如à -> À
,但如果这是一个更大的交易,我不希望过度复杂化。
答案 0 :(得分:6)
单独使用正则表达式无法执行此操作,但您可以将自定义MatchEvaluator
传递给Replace
方法。这可以是lambda表达式,如下所示:
var input = "this is a regular sentence";
var output = Regex.Replace(
input,
@"^(?<cap>\w)(?<rest>\w*)|(?<cap>\w)(?<rest>\w*)$",
m => m.Groups["cap"].Value.ToUpper() + m.Groups["rest"]);
Console.WriteLine(output); // This is a regular Sentence
请注意,在模式中,我使用了命名组,因此我不必担心我是在格式化第一个还是最后一个单词。
或者更简单
var output = Regex.Replace(
input,
@"^(?<cap>\w)|\b(?<cap>\w)(?=\w*$)",
m => m.Groups["cap"].Value.ToUpper());
在这里,我需要使用前瞻断言来识别最后一个单词,但除此之外,这个想法是相同的。
如果表现是一个大问题,您可以随时执行此操作:
int c = input.LastIndexOf(' ');
var output =
char.ToUpper(input[0]) +
input.Substring(1, c) +
char.ToUpper(input[c + 1]) +
input.Substring(c + 2);
但是,此方法确实假设最后一个单词前面有空格。