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

匹配带引号/无引号Windows文件路径的.NET正则表达式问题

正则表达式问题解决

问题分析

你当前用于匹配无引号路径的正则@""[a-zA-Z]:\.*?""存在三个核心问题:

  • 转义错误:在C#逐字字符串(@前缀)中,路径分隔符需要用\\表示,你写成\.*?会导致匹配逻辑混乱,无法正确识别路径结构。
  • 未排除前缀引号:没有添加前置断言限制,会匹配到带引号路径内部的片段,造成冗余结果。
  • 匹配逻辑缺陷:.*?是惰性匹配任意字符,会过早终止匹配,无法完整捕获无空格的路径内容。

修正方案

组合正则(同时匹配带引号/无引号路径)

用一条正则即可完成两种路径的匹配,避免分开处理的麻烦:

Regex.Matches(input, @"(?<!""|^)(?:[a-zA-Z]:\\[^""\s]+|""[a-zA-Z]:\\.*?"")", RegexOptions.IgnoreCase)

单独匹配无引号路径的正则

如果需要分开处理,修正后的无引号路径匹配正则:

Regex.Matches(input, @"(?<!""|^)[a-zA-Z]:\\[^""\s]+", RegexOptions.IgnoreCase)

正则规则说明

  • (?<!""|^):负向零宽断言,确保路径前面不是引号或字符串开头,彻底避免匹配带引号路径内部的内容。
  • [a-zA-Z]:\\:匹配不区分大小写的盘符和路径分隔符。
  • [^""\s]+:匹配无空格、无引号的路径内容,确保无引号路径只捕获到有效结尾。
  • ""[a-zA-Z]:\\.*?"":保留你原有的带引号路径匹配逻辑,可正确捕获包含空格的带引号路径。

匹配效果验证

针对示例文本:"C:\Future\Code In Progress" 任意无关文本 C:\Data\Code v:\Bless\Test.txt "D:\APPZ\Bam Bam\Malkop.mp3",修正后的正则会准确提取以下4个路径:

  • "C:\Future\Code In Progress"
  • C:\Data\Code
  • v:\Bless\Test.txt
  • "D:\APPZ\Bam Bam\Malkop.mp3"

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 17:22:43