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

正则表达式技术问题:无法提取目标字符串的第二捕获组

问题分析与解决方案

你的问题出在贪婪匹配上!在Singleline模式下,.会匹配包括换行在内的所有字符,而正则里的.*是贪婪的——它会尽可能多地匹配内容,导致Phone.*\n这部分直接吃掉了从Phone开始到最后一个换行符的所有内容(也就是(123) 456-7890\nLine2\nLine3\n),后面的(.*)City自然就没有剩余内容可以捕获了,所以第二组返回null。

修正后的正则表达式

把Phone.*\n中的贪婪.*改成非贪婪的.*?,让它只匹配到第一个换行符为止,这样就能给后面的捕获组留出Line2\nLine3的内容:

Regex rg = new Regex(@"Address(.*)Phone.*?\n(.*)City", RegexOptions.Singleline);

为什么这样有效?

  1. Address(.*)Phone:依然捕获Address和Phone之间的123 Abc st. (如果想去掉末尾多余空格,可以调整为Address\s*(.*?)\s*Phone,完全适配你的预期结果)。
  2. Phone.*?\n:非贪婪匹配Phone后面的内容直到第一个换行符,也就是(123) 456-7890\n,不会吃掉后面的Line2和Line3。
  3. (.*)City:在Singleline模式下,.*会匹配从第一个换行符之后到City之前的所有内容,正好是Line2\nLine3,完美符合你的需求。

测试验证

用你的输入字符串测试修正后的正则,捕获组1会得到123 Abc st. ,捕获组2会准确返回Line2\nLine3。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 03:46:25