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

正则表达式如何精准提取两个分隔符之间的目标字符串

正则提取指定地址段解决方案

问题背景

  • 待处理字符串样例:[Radius: 4000 mi.] -- 61362 -- Spring Valley, IL, US
  • 提取目标:Spring Valley, IL
  • 原有规则问题:使用(?<=--)(.*?)(?=\, US)匹配时,会命中第一个--后的所有内容,带入61362 --这类冗余前缀,无法得到正确结果。

可用正则规则

方案1(易读易维护,推荐)

正则表达式:

--\s*(.*?)(?=, US$)

使用时取第1个捕获组的内容即可。
规则说明:

  • 给后置匹配的, US增加字符串结束锚定符$,确保匹配的是字符串最末尾的国家后缀,不会提前匹配到其他位置的同文字段
  • 非贪婪匹配逻辑会自动定位到离末尾, US最近的一个--分隔符作为匹配起点,自动跳过前面的半径值、编号等冗余内容
  • \s*用于兼容--后可能存在的空格字符,避免多余空格被带入提取结果

方案2(纯零宽断言,匹配结果直接为目标内容)

正则表达式:

(?<=-- )(?:(?! -- ).)*(?=, US$)

规则说明:

  • 前置零宽断言定位-- 分隔符位置
  • 中间加负向预查(?! -- ),确保匹配的内容段里不会再出现--分隔符,天然锁定最后一个分隔符后的地址段
  • 后置零宽断言锚定末尾的, US,整个匹配结果不需要额外处理分组,直接就是目标文本

原有规则失效原因

原规则的前置断言(?<=--)只校验当前位置前是否为--,字符串中第一个--(半径字段后的分隔符)也满足该条件,非贪婪匹配会从第一个符合前置条件的位置开始抓取,自然会把中间的编号段、第二个--都带入匹配结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 15:18:24