gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 20:29:42 26 4
gpt4 key购买 nike

我尝试使用我在这个 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com