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

如何使用正则提取指定必填词(code组)与可选数字序列(phone组)

解决正则匹配关联code与phone的问题

你的核心问题是原正则用|分隔了code和phone的匹配规则,导致两者会被单独匹配,无法建立关联。要实现只有当出现pin/puk时才匹配,同时捕获对应的可选9位数字,需要把code和phone的匹配逻辑绑定在一起,而不是分开。

修正后的正则表达式

\b(?<code>pin|puk)\b.*?(?<phone>\b\d{9}\b)?

规则说明:

  • \b(?<code>pin|puk)\b:精准匹配单词边界的pin或puk,捕获到code分组(确保不会匹配类似pin123这类非独立单词)
  • .*?:非贪婪匹配任意字符(除换行符,若需支持换行可加s修饰符),用于匹配code和phone之间的无关内容
  • (?<phone>\b\d{9}\b)?:可选捕获连续9位数字到phone分组,?表示这部分可以不存在(即code后面没有符合要求的数字时,phone分组为空)

进阶优化(避免跨code匹配)

如果希望每个code只匹配其后面、下一个code之前的9位数字,可使用负向预查避免中间出现其他pin/puk:

\b(?<code>pin|puk)\b(?:(?!pin|puk).)*?(?<phone>\b\d{9}\b)?

(?:(?!pin|puk).)*?的作用是:匹配任意字符,但一旦遇到pin或puk就停止,确保每个code对应自己后续的数字。

测试示例

针对你的示例文本:

blah pin blah 111222333  blah puk blah 12 blah 123456789 blah

使用修正后的正则会得到两个匹配结果:

  1. code: pin,phone: 111222333
  2. code: puk,phone: 123456789

不会再单独匹配数字,完全符合你的需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 23:25:17