Est-il possible de mettre en majuscule le premier caractère de chaque mot en utilisant regex?Comment mettre en majuscule le premier caractère de chaque mot en utilisant une regex dans VB.NET?
Je vais utiliser cela dans VB.net (SSIS)
Est-il possible de mettre en majuscule le premier caractère de chaque mot en utilisant regex?Comment mettre en majuscule le premier caractère de chaque mot en utilisant une regex dans VB.NET?
Je vais utiliser cela dans VB.net (SSIS)
EDIT: code VB.NET ajouté ci-dessous
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))
Si vous ne pouvez pas utiliser lambdas puis utilisez un MatchEvaluator à la place:
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
Ce n'est pas vraiment un cas de titre dans le sens du formatage MS Word, mais assez proche.
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));
Cela gère bien un des mots de lettre, comme Substring ne lancera pas d'erreur sur quelque chose comme « A "dans l'entrée.
Dans quels scénarios lambdas ne sont pas disponibles dans VB.NET et/ou C# s'il vous plaît? –
@MagnusSmith lors de l'utilisation des versions qui ne les prenaient pas en charge, à savoir C# 2.0 et VB.NET 8.0 (généralement associés à Visual Studio 2005 et .NET 2.0). –
Explication Downvote? –
Vous pouvez le faire, mais cela est une fonction assez courante dans la plupart des langages de programmation. Par exemple, la fonction est ucwords ($ word) en PHP.
Je n'ai jamais utilisé PHP, mais je ne me souviens pas de cette méthode dans d'autres langues que j'ai utilisées, même si je ne l'ai pas remarqué. – Jeremy
Jetez un oeil à Capitalize First Letter of Each Word et au C# Uppercase Words in String, j'ai posté en deux langues, Perl et C#, parce que vous n'avez pas spécifié la langue que vous utilisez.
s/\b(\w+)\b/ucfirst($1)/ge
Nice et facile - 's/\ b (\ w +)/\ u $ 1/g' ou' s/\ b (\ w)/\ U \ 1/g' pour faire court. Malheureusement, la question maintenant spécifie VB.NET, donc cette réponse Perl n'est plus pertinente ... – ephemient
Non regex "pure", mais la plupart des implémentations spécifiques à la plateforme ont une façon de le faire:
Par exemple, en python:
import re
re.compile(r'\b\w').sub(lambda x: x.group(0).upper(), 'hello')
Dans ce cas, nous passons une appelable lambda à la méthode sub() (plutôt qu'à une chaîne de remplacement) qui retournera la chaîne correspondante en haut. La plupart des langues ont un équivalent où vous passez un appelable comme le «remplacement».
En VB.NET, vous pouvez passer votre 'remplacement' lambda comme Function (x) x.Value(0).ToString().ToUpper()
.NET a intégré le support pour cela. Voir TextInfo.ToTitleCase pour la documentation.
Mon code contient des méthodes d'extension pour C#. Je suppose que VB.NET les a aussi, mais je ne connais pas assez bien VB.NET pour les convertir moi-même.
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);
}
}
Pourquoi ne pas simplement utiliser le TextInfo.ToTitleCase() method déjà intégré dans le .NET Framework?
string capitalized = System.Globalization.CultureInfo.CurrentCulture.TextInfo.ToTitleCase("this string should be capitalized!");
Ne savait pas à ce sujet. Pourrait être une excellente solution pour moi. Merci! – Jeremy
Juste une note rapide ici. Pour vous assurer que la première lettre de chaque mot est en majuscule, vous devez d'abord convertir la chaîne d'origine en minuscules. Ma chaîne d'origine était en majuscules et '.ToTitleCase' ne semblait pas avoir d'effet. – QFDev
Dim s As String = "your string"
Dim s2 As String = StrConv(s, VbStrConv.ProperCase
MessageBox.Show(s2)
Utilisez la fonction ProperCase
:
Dim Str As String = "the quick brown fox jumps over the lazy dog"
Dim NewStr As String = StrConv(Str, VbStrConv.ProperCase)
faire sur l'événement de presse clé de votre zone de texte.
If e.KeyChar <> ChrW(Keys.Back) Then
If txtEname.Text = "" Then
e.KeyChar = UCase(e.KeyChar)
End If
End If
Vous devez spécifier un langage de programmation ou demander une réponse agnostique. –
@Jeremy: J'ai ajouté l'équivalent VB.NET à ma réponse –