Regex vb.net中的正则表达式不起作用

Regex vb.net中的正则表达式不起作用,regex,vb.net,Regex,Vb.net,我正试图使work成为我的正则表达式。它应该只接受带有逗号和撇号的字母数字。它们可以按任何顺序排列。我创建了一个只接受接受字符的方法。似乎是拒绝了我只想被接受的角色。代码如下: Public Shared Function formatToken_alphanumericWithSpecificSymbol(input As String) As String Dim pattern As String = "^[\w', ]+$" Dim rgx As Regex = New

我正试图使work成为我的正则表达式。它应该只接受带有逗号和撇号的字母数字。它们可以按任何顺序排列。我创建了一个只接受接受字符的方法。似乎是拒绝了我只想被接受的角色。代码如下:

Public Shared Function formatToken_alphanumericWithSpecificSymbol(input As String) As String

    Dim pattern As String = "^[\w', ]+$"
    Dim rgx As Regex = New Regex(pattern)
    Dim mInput As StringBuilder = New StringBuilder()

    For Each c As Char In input

        If rgx.IsMatch(c.ToString()) Then
        Else
            mInput.Append(c)
        End If
    Next

    Return mInput.ToString()

End Function

假定它只返回所有接受的字符。如果传递了abc'*的示例:如果您只是试图过滤掉非法字符,那么它应该只返回abc'

,您可以这样做

Dim pattern As String = "[^\w', ]"
Dim rgx As Regex = New Regex(pattern)
Return rgx.Replace(input, "")
返回字符串是否有效

Dim pattern As String = "^[\w', ]+$"
Dim rgx As Regex = New Regex(pattern)
Return rgx.IsMatch(input)

仅就您的实现进行评论,您的代码不起作用的原因是您只在ELSE条件中添加字符,删除ELSE就可以了。但是,由于正则表达式可以对整个解决方案进行操作,因此您应该让它运行,而不是自己单独解析每个字符。

该代码应该做什么^[\w',]+$匹配任何包含1+字',和空格字符的字符串。似乎您所需要的只是如果rgx.IsMatchinput然后Return inputit被假定为只返回所有字符。如果abc'*被传递,则示例:它应仅返回abc'@War10ck\w表示包含字母数字字符@justg的单词字符。如果去掉ELSE语句,则您正在反转if。但是,当正则表达式可以跨整个字符串运行时,这是一个低效的解决方案string@Justgfather第一个答案是rgx.Replace返回一个新字符串,它不会改变输入