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

为什么我的正则表达式对部分符合条件的字符串匹配失败?

问题根因
  • 核心问题:文件写入逻辑错误混入无效待匹配内容
    你当前代码将输入的(ID,路径)元组转换为[ID字符串, 路径]数组后压平写入文件,最终写入的文件结构为:
第1行:ID1
第2行:路径1
第3行:ID2
第4行:路径2
...

用File.ReadAllLines读取后所有行都会进入正则匹配逻辑,纯数字的ID行自然无法匹配规则,这就是相同路径有时匹配成功有时失败的直接原因。

  • 次要问题:正则规则存在逻辑漏洞
  1. File.ReadAllLines返回的每一行会自动移除末尾换行符,你规则中的(?=\n)断言永远无法触发
  2. 非贪婪匹配.*?配合后置断言,当路径结尾既不是?也不是数字时,无法完成匹配,比如示例中的/review-id-service/v1/business-id就会命中该问题导致匹配失败
修复方案
  1. 移除冗余的写文件再读文件流程,直接处理原始输入中的路径字段,避免混入ID
  2. 修正正则规则,将结束条件改为匹配到?或行尾即可,适配你的提取需求:
(?i)/.*?/v\d/[^?]*
  1. 优化后代码参考:
[<Literal>]
let ApiPattern = @"(?i)/.*?/v\d/[^?]*"

let parseOutEndpoints (inputs : (int * string) array) =
    let regEx = Regex(ApiPattern, RegexOptions.Compiled)
    inputs 
    |> Array.map(fun (id, path) -> 
        let m = regEx.Match(path)
        if m.Success then
            Domain.Endpoint(m.Value)
        else
            File.AppendAllLines(FailedRegexMatches, [path], Encoding.UTF8)
            Domain.NoEndpoint
    )

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 13:36:02