2009-11-03 4 views

답변

11

편집 : 당신이 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 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

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#을 게시했습니다. 사용중인 언어를 지정하지 않았기 때문입니다. 우리가 전달이 경우

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

: 파이썬에서, 예를 들어

: 없음 "순수"정규식,하지만 대부분의 플랫폼 별 구현에

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

그것을 할 수있는 방법이 (대체 문자열이 아닌) sub() 메서드에 호출 가능한 람다 (lambda)를 호출하여 대문자와 일치하는 문자열을 반환합니다. 대부분의 언어는 호출 가능 코드를 '대체 코드'로 전달할 때와 동등한 기능을 제공합니다. 당신이로 '교체'람다를 전달할 수 VB.NET에서

Function (x) x.Value(0).ToString().ToUpper()

5

.NET에는이 기능이 내장되어 있습니다. 설명서는 TextInfo.ToTitleCase을 참조하십시오.

내 코드에는 C#의 확장 메서드가 일부 포함되어 있습니다. 나는 VB.NET도 그것들을 가지고 있다고 가정하지만, 나는 VB.NET을 그들 자신을 변환 할만큼 충분히 잘 모른다. 은 .NET Framework의

이미
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 ?

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 
관련 문제