2009-11-03 8 views

答えて

11

EDIT:あなたはMatchEvaluatorを使用し、その後ラムダを使用することができない場合は VB.NETコードは

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)) 

の下に追加代わりに:

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ワードフォーマットの意味ではタイトルではありませんが、十分に近いです。


あなたは、言語を指定していないが、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のように何かにエラーをスローしないように、1つの文字の単語を処理します"と入力します。

+0

VB.NETやC#で使用できないラムダのシナリオはどうですか? –

+1

@MagnusSmithをサポートしていないバージョン、つまりC#2.0とVB.NET 8.0(通常はVisual Studio 2005と.NET 2.0に関連付けられています)を使用しています。 –

+0

Downvoteの説明は? –

0

VB.net(SSIS)でこれを使用するつもりですが、しかし、これはほとんどのプログラミング言語ではかなり一般的な機能です。たとえば、この関数はPHPのucwords($ word)です。

+0

PHPを使ったことは一度もありませんが、私が使用した他の言語でこのメソッドを呼び出すことはありません。 – Jeremy

1

Capitalize First Letter of Each WordC# Uppercase Words in Stringを見て、使用している言語を指定していないため、PerlとC#の2言語で投稿しました。私たちは合格この場合

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

:Pythonで、例えば

:ない「純粋な」正規表現が、ほとんどのプラットフォーム固有の実装で

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

簡潔に 's/\ b(\ w +)/ \ u $ 1/g'または' s/\ b(\ w)/ \ U \ 1/g'です。残念ながら、今質問はVB.NETを指定しているので、このPerlの回答はもはや関連性がありません。 – ephemient

2

はそれを行うための方法を持っています対応する文字列を大文字にして返す、subst()メソッド(置換文字列ではなく)に呼び出し可能なラムダ。ほとんどの言語では、呼び出し可能なものを '置換'として渡す部分と同等のものがあります。あなたのようにあなたの '交換' ラムダを渡すことができます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

理由だけではなく、.NET Frameworkで既に作り付けTextInfo.ToTitleCase() methodを使わないのでしょうか?

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

これについて知りませんでした。私のための素晴らしい解決策かもしれません。ありがとう! – Jeremy

+4

ここで簡単にメモします。各単語の最初の文字が大文字になるようにするには、最初に元の文字列を小文字に変換する必要があります。私の元の文字列はすべて大文字で、 '.ToTitleCase'は効果がないようです。 – QFDev

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 
関連する問題