C#RegEx匹配模式

时间:2014-05-21 13:26:13

标签: c# regex

对于编程问题,我需要将每个单词的每个字母都改为大写。 Egs:This is a string应更改为ThiS iS A strinG。我对正则表达式的了解很少,这就是我能想到的(这里是我的字符串的变量名):

return Regex.Replace(s,@"(?:\w\s|\s\a)",c=>c.Value.ToUpper());

这个表达式的问题在于它没有转换字符串的最后一个字母表(即' G'在' strinG')。任何帮助表示赞赏。感谢

BTW还有两种方法可以解决这个问题,但是你看到它们太笨拙了,我希望解决方案更整洁。 1。

return new String(s.Select((x,i)=>(i+1==s.Length ||s[i+1]==' ')?Char.ToUpper(x):x).ToArray());

2

return new String(((new CultureInfo("en-US",false)).TextInfo.ToTitleCase(new String(s.Reverse().ToArray()))).Reverse().ToArray());

2 个答案:

答案 0 :(得分:1)

使用此:

return Regex.Replace(s, @"(\w)\b", c => c.Value.ToUpper());

答案 1 :(得分:-1)

而不是

?:\w\s|\s\a

使用

?:\w\b|\s\a

在字边界而不是空格之前查找字符。

修改

正如OP指出的那样,在铃声字符之前也需要\b,因此:

?:\w\b|\b\a

RegExr example