2009-11-03 64 views

回答

11

編輯:添加下面

Dim input As String = "The quick brown fox jumps over the lazy dog" 
Dim pattern As String = "\b(\w|['-])+\b" 
' With lambda support: 
Dim result As String = Regex.Replace(input, pattern, _ 
    Function (m) m.Value(0).ToString().ToUpper() & m.Value.Substring(1)) 

VB.NET代碼如果您不能使用lambda表達式,然後使用一個MatchEvaluator相反:

Dim evaluator As MatchEvaluator = AddressOf TitleCase 
Dim result As String = Regex.Replace(input, pattern, evaluator) 

Public Function TitleCase(ByVal m As Match) As String 
    Return m.Value(0).ToString().ToUpper() & m.Value.Substring(1) 
End Function 

這不是真正的標題情況下的MS Word格式意義,但足夠接近。


沒有指定的語言,但在C#中,你可以這樣做:

string input = "The quick brown fox jumps over the lazy dog"; 
string pattern = @"\b(\w|['-])+\b"; 
string result = Regex.Replace(input, pattern, 
        m => m.Value[0].ToString().ToUpper() + m.Value.Substring(1)); 

這很好地處理一個字母的單詞,如子串不會扔東西的錯誤,如「A 「在輸入中。

+0

在哪些情況下lambda在VB.NET和/或C#中不可用? – 2011-12-13 14:42:40

+1

@MagnusSmith在使用不支持它們的版本時,即C#2.0和VB.NET 8.0(通常與Visual Studio 2005和.NET 2.0相關聯)。 – 2011-12-13 19:35:29

+0

Downvote解釋? – 2013-06-18 11:31:34

0

你可以做到這一點,但是這是大多數編程語言中一個很常見的功能。例如,該函數是PHP中的ucwords($ word)。

+0

我從來沒有使用過PHP,但不記得我用過的其他語言中的這種方法,儘管我可能沒有注意到它。 – Jeremy 2009-11-03 16:24:05

4
s/\b(\w+)\b/ucfirst($1)/ge 
+1

不錯又簡單 - 簡單的說就是\ \ b(\ w +)/ \ u $ 1/g'或's/\ b(\ w)/ \ U \ 1/g'。不幸的是,這個問題現在指定了VB.NET,所以這個Perl的答案不再相關... – ephemient 2009-11-03 17:18:39

2

不要在「純」正則表達式,但大多數特定平臺的實現有辦法做到這一點:

例如,在蟒蛇:

import re 
re.compile(r'\b\w').sub(lambda x: x.group(0).upper(), 'hello') 

在這種情況下,我們通過一個可調用的lambda到sub()方法(而不是替換字符串),它將返回匹配的字符串大寫。大多數語言都有一些相同的地方,你可以將「可替代」作爲「替代品」。

在VB.NET,你可以通過你的 '替代' 拉姆達爲Function (x) x.Value(0).ToString().ToUpper()

5

.NET對此有內置支持。有關文檔,請參見TextInfo.ToTitleCase

我的代碼包含一些C#的擴展方法。我認爲VB.NET也有,但我不知道VB.NET能夠自己轉換它們。

public static class StringExtensions { 
    public static string ToTitleCase(this string value) { 
     return value.ToTitleCase(CultureInfo.InvariantCulture); 
    } 

    public static string ToTitleCase(this string value, CultureInfo culture) { 
     return value.ToTitleCase(culture.TextInfo); 
    } 

    public static string ToTitleCase(this string value, TextInfo textInfo) { 
     return textInfo.ToTitleCase(value); 
    } 
} 
25

爲什麼不直接使用內置的TextInfo.ToTitleCase() method已經在.NET Framework?

string capitalized = System.Globalization.CultureInfo.CurrentCulture.TextInfo.ToTitleCase("this string should be capitalized!"); 
+0

不知道這件事。對我來說可能是一個很好的解決方案謝謝! – Jeremy 2009-11-03 17:29:11

+4

這裏只是一個快速記錄。爲確保每個單詞的第一個字母大寫,首先需要將原始字符串轉換爲小寫。我的原始字符串全部大寫,'.ToTitleCase'似乎沒有效果。 – QFDev 2013-06-18 10:25:37

5
Dim s As String = "your string" 
Dim s2 As String = StrConv(s, VbStrConv.ProperCase 
MessageBox.Show(s2) 
2

使用ProperCase功能:

Dim Str As String = "the quick brown fox jumps over the lazy dog" 
Dim NewStr As String = StrConv(Str, VbStrConv.ProperCase) 

0

做這個文本框的按鍵事件。

If e.KeyChar <> ChrW(Keys.Back) Then 
      If txtEname.Text = "" Then 
       e.KeyChar = UCase(e.KeyChar) 
      End If 


     End If 
相關問題