VB.Net中Like运算符不符合预期问题及匹配需求咨询
VB.Net中Like运算符的匹配问题
测试案例
以下是VB.Net中的测试结果:
- 测试1:
返回? "0.326X0.450" Like "*#X#*#X#*#X#*"False,符合预期(字符串仅含1个X) - 测试2:
返回? "0.326X0.450" Like "*#X#*"True,符合预期(匹配包含单个X的结构) - 测试3:
返回? "0.326X0.450" Like "*#X#*#X#*"True,不符合预期(原以为该模式需要匹配两个X,但*可匹配空内容,导致单个X的字符串也能匹配)
需求说明
需要区分两种字符串格式:
- 格式A:
[正值]X[正值](例如2.000X2.000,仅含1个X) - 格式B:
[正值]X[正值]X[正值](例如2.000X2.000X2.000,含2个X)
解决方案
用Like运算符实现区分
Like的*通配符可匹配任意长度(包括0)的字符,因此需要通过组合条件限制匹配范围:
- 匹配仅含1个X的格式A:
更严谨的写法(避免匹配' 确保字符串包含且仅包含一个X,同时X前后为数字相关内容 ? "2.000X2.000" Like "*[0-9.]X[0-9.]*" And Not "2.000X2.000" Like "*X*X*"X2.000或2.000X这类不完整格式):? "2.000X2.000" Like "#*[0-9]X#*[0-9]" And Not "2.000X2.000" Like "*X*X*" - 匹配含2个X的格式B:
' 确保字符串包含且仅包含两个X ? "2.000X2.000X2.000" Like "*X*X*" And Not "2.000X2.000X2.000" Like "*X*X*X*"
用正则表达式实现精确匹配
如果需要严格校验正值的合法性(比如避免多个小数点、非数字字符等),Like的能力有限,推荐使用正则表达式:
Imports System.Text.RegularExpressions ' 匹配格式A(仅1个X,前后为合法正值) Regex.IsMatch("2.000X2.000", "^[0-9]+(\.[0-9]+)?X[0-9]+(\.[0-9]+)?$") ' 匹配格式B(仅2个X,前后为合法正值) Regex.IsMatch("2.000X2.000X2.000", "^[0-9]+(\.[0-9]+)?X[0-9]+(\.[0-9]+)?X[0-9]+(\.[0-9]+)?$")
内容的提问来源于stack exchange,提问作者PKanold
相关产品推荐
相关产品推荐

