2

我正在尝试从将成为 sql 查询的一部分的文本字段中清理一个字符串。

我创建了一个函数:

Private Function cleanStringToProperCase(dirtyString As String) As String
    Dim cleanedString As String = dirtyString
    'removes all but non alphanumeric characters except @, - and .'
    cleanedString = Regex.Replace(cleanedString, "[^\w\.@-]", "")
    'trims unecessary spaces off left and right'
    cleanedString = Trim(cleanedString)
    'replaces double spaces with single spaces'
    cleanedString = Regex.Replace(cleanedString, "  ", " ")
    'converts text to upper case for first letter in each word'
    cleanedString = StrConv(cleanedString, VbStrConv.ProperCase)

    'return the nicely cleaned string'
    Return cleanedString
End Function

但是当我尝试用两个单词清理任何文本时,它会删除所有空白。“daz 的自行车”变成了“Dazsbike”。我假设我需要修改以下行:

   cleanedString = Regex.Replace(cleanedString, "[^\w\.@-]", "")

这样它还可以保留单个空白字符。由于我无法在任何在线教程或 MSDN 网站 ( http://msdn.microsoft.com/en-us/library/844skk0h(v=vs.110).aspx )

4

2 回答 2

3

使用"[^\w\.,@\-\' ]"而不是您的模式字符串。

另外,我会用

Regex.Replace(cleanedString, " +", " ")

代替

Regex.Replace(cleanedString, "  ", " ")
于 2013-05-14T14:25:06.317 回答
1

或者,如果你不是正则表达式的忠实粉丝......

Private Function cleanStringToProperCase(dirtyString As String) As String
    'specify valid characters
    Dim validChars As String = " @-.0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"
    'removes all but validChars'
    Dim cleanedString As String = dirtyString.Where(Function(c) validChars.Contains(c)).ToArray
    Dim myTI As Globalization.TextInfo = New Globalization.CultureInfo(Globalization.CultureInfo.CurrentCulture.Name).TextInfo

    'return the nicely cleaned string'
    Return myTI.ToTitleCase(cleanedString.Trim)
End Function
于 2013-05-14T14:58:15.853 回答