Czy można używać wielkich liter w pierwszym znaku każdego słowa za pomocą wyrażenia regularnego?Jak wpisać w wielkie litery pierwszy znak każdego słowa za pomocą wyrażenia regularnego w VB.NET?
mam zamiar używać tego w VB.NET (SSIS)
Czy można używać wielkich liter w pierwszym znaku każdego słowa za pomocą wyrażenia regularnego?Jak wpisać w wielkie litery pierwszy znak każdego słowa za pomocą wyrażenia regularnego w VB.NET?
mam zamiar używać tego w VB.NET (SSIS)
EDIT: kod VB.NET dodany poniżej
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))
Jeśli nie można używać lambdy następnie użyć MatchEvaluator zamiast:
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
To nie jest tak naprawdę przypadek Tytułu w sensie formatowania MS Word, ale wystarczająco blisko.
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));
To ładnie obsługuje jedną literę słowa, jako podciąg nie wygeneruje błąd na coś takiego jak „A "na wejściu.
W których scenariuszach nie są dostępne lambdy w VB.NET i/lub C#? –
@MagnusSmith przy korzystaniu z wersji, które ich nie obsługiwały, a mianowicie C# 2.0 i VB.NET 8.0 (zwykle związane z Visual Studio 2005 i .NET 2.0). –
Objaśnienia do objaśnień? –
Można to zrobić, jednak jest to dość powszechne funkcja w większości języków programowania. Na przykład funkcją jest ucwords ($ word) w PHP.
Nigdy nie stosowałem PHP, ale nie pamiętam tej metody w innych językach, których używałem, chociaż mogłem tego nie zauważyć. – Jeremy
Spójrz na Capitalize First Letter of Each Word i C# Uppercase Words in String, opublikowałem w dwóch językach, Perl i C#, ponieważ nie określiłeś języka, którego używasz.
s/\b(\w+)\b/ucfirst($1)/ge
Ładne i łatwe - skrót "s/\ b (\ w +)/\ u 1/g" lub "s/\ b (\ w)/\ U \ 1/g". Niestety, teraz pytanie określa VB.NET, więc ta odpowiedź Perla nie ma już znaczenia ... – ephemient
Nie w „czystej” regex, ale większość wdrożeń platformy specyficzne mają sposób, aby to zrobić:
na przykład w Pythonie:
import re
re.compile(r'\b\w').sub(lambda x: x.group(0).upper(), 'hello')
W tym przypadku Mijamy możliwość wywołania lambda do metody sub() zamiast do ciągu zastępczego, która zwróci pasujący ciąg znaków upper cased. Większość języków ma taki sam odpowiednik, kiedy przekazujesz żądanie jako "zastępstwo".
W VB.NET można zdać 'zastąpienie' lambda jako Function (x) x.Value(0).ToString().ToUpper()
.NET ma wbudowane wsparcie dla tego. Zobacz dokumentację w dokumencie TextInfo.ToTitleCase.
Mój kod zawiera kilka metod rozszerzenia dla języka C#. Zakładam, że VB.NET również je ma, ale nie znam VB.NETa na tyle dobrze, aby sam je przekonwertować.
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);
}
}
Dlaczego nie wystarczy użyć Wbudowana już TextInfo.ToTitleCase() method w .NET Framework?
string capitalized = System.Globalization.CultureInfo.CurrentCulture.TextInfo.ToTitleCase("this string should be capitalized!");
Nie wiedziałem o tym. To może być świetne rozwiązanie dla mnie. Dzięki! – Jeremy
Krótka notka tutaj. Aby upewnić się, że pierwsza litera każdego słowa jest pisana wielką literą, najpierw musisz przekonwertować oryginalny ciąg znaków na małe litery. Mój oryginalny ciąg był cały czapki i '.ToTitleCase' nie wydaje się mieć żadnego efektu. – QFDev
Dim s As String = "your string"
Dim s2 As String = StrConv(s, VbStrConv.ProperCase
MessageBox.Show(s2)
Zastosowanie ProperCase
funkcja:
Dim Str As String = "the quick brown fox jumps over the lazy dog"
Dim NewStr As String = StrConv(Str, VbStrConv.ProperCase)
Czyńcie to na klucz prasowej przypadku Twojego pola tekstowego.
If e.KeyChar <> ChrW(Keys.Back) Then
If txtEname.Text = "" Then
e.KeyChar = UCase(e.KeyChar)
End If
End If
Należy podać język programowania lub poprosić o odpowiedź agnostyczną. –
@Jeremy: Dodałem odpowiednik VB.NET do mojej odpowiedzi –