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

C# .NET正则组捕获:如何在SqlTable文本前终止匹配?

解决C#正则中StorePath捕获多余内容的问题

这个问题我之前也碰到过,核心原因是你用的.*是贪婪匹配——它会尽可能多地抓取字符,直到碰到字符串末尾的最后一个双引号,所以才把后面的SqlTable="SqlTableName"也塞进了storePath的捕获组里。

给你两个靠谱的解决方案:

方案1:使用非贪婪匹配模式

把捕获组里的.*改成.*?,让正则尽可能少地匹配字符,碰到第一个双引号就停止。修改后的正则如下:

Defaults(.*)Class="(?<class>.*?)"(.*)StorePath="(?<storePath>.*?)"

方案2:使用更精确的字符匹配(推荐)

因为双引号包裹的内容里不会包含双引号本身,所以可以用[^"]*来替代.*——这个表达式表示“匹配所有非双引号的字符”,不仅不会出现贪婪匹配的问题,性能也比非贪婪模式更好。同时还可以把原来模糊的(.*)换成\s*(匹配任意空白字符),让正则更精准:

Defaults\s*Class="(?<class>[^"]*)"\s*StorePath="(?<storePath>[^"]*)"

用这两种正则去匹配你的目标字符串,都能准确捕获到:

  • class: Class name here
  • storePath: Any store path here
    完全不会包含后面的SqlTable相关内容。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 06:37:53