如何在VB.NET中使用正则表达式大写每个单词的第一个字符?

时间:2009-11-03 15:39:08

标签: vb.net regex ssis

是否可以使用正则表达式对每个单词的第一个字符进行大写?

我将在VB.net(SSIS)中使用它

9 个答案:

答案 0 :(得分:27)

为什么不使用.NET Framework中已经内置的TextInfo.ToTitleCase() method

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

答案 1 :(得分:11)

编辑:下面添加了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))

如果你不能使用lambdas,那么请改用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));

这很好地处理了一个字母的单词,因为Substring不会在输入中输出“A”之类的内容。

答案 2 :(得分: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);
    }
}

答案 3 :(得分:5)

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

答案 4 :(得分:4)

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

答案 5 :(得分:2)

不是“纯”正则表达式,但大多数特定于平台的实现都有办法:

例如,在python中:

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

在这种情况下,我们将一个可调用的lambda传递给sub()方法(而不是替换字符串),该方法将返回匹配的字符串upper cased。大多数语言都有一些等效的地方,你可以通过一个可调用的“替换”。

在VB.NET中,您可以将“替换”lambda传递为Function (x) x.Value(0).ToString().ToUpper()

答案 6 :(得分:2)

使用ProperCase功能:

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

答案 7 :(得分:0)

你可以这样做,但是在大多数编程语言中这是一个非常常见的功能。例如,函数是PHP中的ucwords($ word)。

答案 8 :(得分:0)

在文本框的按键事件上执行此操作。

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


        End If