求特定正则表达式:提取首短横线后两段短横线间的内容
解决方案:提取指定位置的短横线间隔内容
正则表达式
^(?:.*?\s*-\s*){2}(.*?)(?=\s*-\s*)
正则说明
^:锚定字符串开头,确保从左向右匹配,避免捕获中间无关片段(?:.*?\s*-\s*){2}:非捕获组,用于跳过前两个短横线分隔的区块:.*?:非贪婪匹配任意字符,直到遇到下一个分隔符\s*-\s*:匹配分隔符,允许短横线前后有任意数量的空格(适配不同格式的分隔写法){2}:重复执行两次,跳过前两个分隔段
(.*?):核心捕获组,非贪婪匹配目标内容,直到遇到下一个分隔符(?=\s*-\s*):正向预查,确保目标内容后面紧跟分隔符,避免捕获多余字符
验证示例
针对你提供的测试字符串:
- 输入:
BRAND NAME - 34953 Some Information, PPF - 00003 - (3.355pz.) 300%→ 捕获结果:00003 - 输入:
893535 - MX LMESJFG - 01001 - ST2 | ls.33.dg - OK→ 捕获结果:01001 - 输入:
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
相关产品推荐
相关产品推荐

