用于格式化controlID的正则表达式用大写字母删除缩写和空格?

时间:2011-04-25 18:20:46

标签: .net regex

我正在尝试编写一个带有这些示例的正则表达式:

  

tbZipCode

     

cbHavingLunch

     

rfvAssessment

     

tbAddress1

     

tbAddress12

输出:

  

邮政编码

     

吃午饭

     

评估

     

地址1

     

地址12

我的代码:

Private Shared Function formatControlName(ByVal controlName As String) As String
    Dim newName As String = Nothing

    If controlName <> Nothing Then
        newName = Regex.Replace(controlName, "^[a-z]*|(([A-Z])|((?<=[A-Za-z])\d))", "$1").TrimStart()
    End If

    Return newName
End Function

我基本上想要删除第一个大写/数字之前的任何字符串(因为它将是控件的缩写,对接收此输出的人没用),然后根据它是资本还是小写后的第一个数字。

什么是正确的正则表达式模式?

编辑:上面的模式只删除了控件缩写,但没有添加空格。

1 个答案:

答案 0 :(得分:4)

我不是正则表达式专家,但这个似乎有效:

Private Shared Function formatControlName(ByVal controlName As String) As String


   Dim newName as string = _
   Regex.Replace(controlName, _
   "^[a-z]*|(([A-Z])|((?<=[A-Za-z])\d))", " $1").TrimStart


   Return newName
End Function

请注意,在原始代码中,您需要返回newName,而不是controlName来获取regex.replace的结果。此外,您似乎将newName字符串设置为空,然后在执行regex.replace之前尝试确保它不是什么?