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

求特定正则表达式:提取首短横线后两段短横线间的内容

解决方案:提取指定位置的短横线间隔内容

正则表达式

^(?:.*?\s*-\s*){2}(.*?)(?=\s*-\s*)

正则说明

  • ^:锚定字符串开头,确保从左向右匹配,避免捕获中间无关片段
  • (?:.*?\s*-\s*){2}:非捕获组,用于跳过前两个短横线分隔的区块:
    • .*?:非贪婪匹配任意字符,直到遇到下一个分隔符
    • \s*-\s*:匹配分隔符,允许短横线前后有任意数量的空格(适配不同格式的分隔写法)
    • {2}:重复执行两次,跳过前两个分隔段
  • (.*?):核心捕获组,非贪婪匹配目标内容,直到遇到下一个分隔符
  • (?=\s*-\s*):正向预查,确保目标内容后面紧跟分隔符,避免捕获多余字符

验证示例

针对你提供的测试字符串:

  1. 输入:BRAND NAME - 34953 Some Information, PPF - 00003 - (3.355pz.) 300% → 捕获结果:00003
  2. 输入:893535 - MX LMESJFG - 01001 - ST2 | ls.33.dg - OK → 捕获结果:01001
  3. 输入:4539883 - AB05 - AG03J238B - | D.87.yes.4/3 - OK → 捕获结果:AG03J238B

代码示例(Python)

import re

pattern = r'^(?:.*?\s*-\s*){2}(.*?)(?=\s*-\s*)'

test_strings = [
    "BRAND NAME - 34953 Some Information, PPF - 00003 - (3.355pz.) 300%",
    "893535 - MX LMESJFG - 01001 - ST2 | ls.33.dg - OK",
    "4539883 - AB05 - AG03J238B - | D.87.yes.4/3 - OK"
]

for s in test_strings:
    match = re.search(pattern, s)
    print(match.group(1) if match else "No match")

输出:

00003
01001
AG03J238B

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 01:05:19