You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

VB.NET正则表达式测试网站匹配但程序无匹配结果问题

VB.NET正则匹配无结果的排查方案

针对你遇到的VB.NET正则匹配返回0结果,但测试网站和片段测试正常的问题,核心原因大概率是目标字符串的实际字符与测试用例不一致,或者正则的兼容性不足,以下是具体排查点和解决方法:

可能的问题原因

  • 非标准空格/引号:目标字符串uppercaseLine中的空格可能是全角空格、制表符,或者双引号是智能引号(“”)而非标准直引号",导致正则里的\s+或""无法匹配。而你截取测试的片段用了标准字符,所以能成功。
  • 正则选项缺失:你测试代码里加了RegexOptions.IgnoreCase,但正式代码没加——即使你把字符串转成大写,若转大写不彻底(比如某些特殊字符未处理),也会导致匹配失败。
  • 单词边界\b意外失效:如果FROM/JOIN前后的字符是单词字符(比如没有空格直接衔接),\b会无法识别边界,但从你提供的目标片段看这种概率较低。

解决方法

1. 预处理目标字符串,统一字符格式

先把非标准的空格、引号替换成标准字符:

' 替换智能引号为标准双引号
uppercaseLine = System.Text.RegularExpressions.Regex.Replace(uppercaseLine, "[“”]", """")
' 将所有空白字符(空格、制表符等)替换为普通半角空格
uppercaseLine = System.Text.RegularExpressions.Regex.Replace(uppercaseLine, "\s", " ")

2. 优化正则表达式,增强兼容性

调整正则,去掉可能失效的\b,改用前后断言匹配边界,同时用\s*兼容任意数量的空白:

Dim pattern = "(?<=^|\s)(FROM|JOIN)\s*""([^""]+)"""
' 或者保留\b,同时添加忽略大小写选项
Dim viewMatches As System.Text.RegularExpressions.MatchCollection = System.Text.RegularExpressions.Regex.Matches(uppercaseLine, pattern, System.Text.RegularExpressions.RegexOptions.IgnoreCase)

3. 调试目标字符串的真实内容

输出uppercaseLine的原始字符编码,确认是否有隐藏字符:

' 输出每个字符的ASCII码,检查空格(32)和引号(34)是否正确
For Each c As Char In uppercaseLine
    Debug.WriteLine($"{c} : {Asc(c)}")
Next

验证代码示例

可以用以下代码快速验证修复效果:

Dim pattern = "(FROM|JOIN)\s+""([^""]+)"""
Dim uppercaseLine = """JOB_HEADER"" .""SHIPD_FLG"" FROM ""JOB_HEADER"" ""JOB_HEADER""  JOB"
' 添加忽略大小写选项
Dim viewMatches As System.Text.RegularExpressions.MatchCollection = System.Text.RegularExpressions.Regex.Matches(uppercaseLine, pattern, System.Text.RegularExpressions.RegexOptions.IgnoreCase)
MsgBox(viewMatches.Count) ' 应该返回1

内容的提问来源于stack exchange,提问作者pg_

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 18:50:28