regex - VBA正则表达式检查特殊符号

标签 regex vba testing

我尝试使用我在这个 post 中学到的东西, 现在我想编写一个 RegExp 来检查字符串是否包含数字和逗号。例如,“1,2,55,2”应该没问题,而“a,2,55,2”或“1.2,55,2”应该无法通过测试。我的代码:

Private Function testRegExp(str, pattern) As Boolean
    Dim regEx As New RegExp

    If pattern <> "" Then
        With regEx
            .Global = True
            .MultiLine = True
            .IgnoreCase = False
            .pattern = pattern
        End With

        If regEx.Test(str) Then
            testRegExp = True
        Else
            testRegExp = False
        End If
    Else
        testRegExp = True
    End If
End Function

Public Sub foo()
    MsgBox testRegExp("2.d", "[0-9]+")
End Sub

MsgBox 产生 true 而不是 false。有什么问题吗?

最佳答案

您的正则表达式匹配部分字符串,它匹配所有 55,2a,2,55,21.2,55,2 中的一个数字 输入字符串。

使用 anchor ^$ 执行完整字符串匹配,并在您说要匹配的字符类中添加逗号仅包含数字和逗号的字符串:

MsgBox testRegExp("2.d", "^[0-9,]*$")
                          ^    ^  ^

我还建议使用 * 量词来匹配 0 次或多次出现,而不是 +(1 次或多次出现 em>),但这需要您自己决定(是否允许空字符串匹配)。

这里是 the regex demo .请注意,它适用于 PCRE 正则表达式风格,但此正则表达式在 VBA 中的表现类似。

是的,如@Chaz建议,如果您不需要匹配字符串/行本身,另一种方法是匹配一个反字符类:

MsgBox testRegExp("2.d", "[^0-9,]")

这样,negated character class [^0-9,] 将匹配除逗号/数字之外的任何字符,使字符串无效。如果结果为 True,则表示该字符串包含除数字和逗号之外的一些字符。

关于regex - VBA正则表达式检查特殊符号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33829889/

相关文章:

php - 如何分解搜索查询

python -\b 正则表达式包括句点作为单词

excel - 如何在 Excel 中使用 VBA 删除包含多个文本字符串之一的行?

vba - 在运行时创建多页崩溃 excel

javascript - 如何实现配置文件以替换 node.js Web App 中的文字值

如果被数字包围而不是字母,Python 正则表达式替换字符串中的空格

regex - R:用 sub 替换多个正则表达式

ASP Classic 中的 Excel ADO - 返回第 2 行作为标题

java - cucumber 中的场景大纲 Hook 之后

java - Junit 测试共享相同的数据对象?我应该 mock 它还是什么?