编写多条件匹配Regex表达式:提取ABC关联的目标数字
提取ABC关联数字的正则解决方案
针对你描述的多条件匹配场景,我整理了一个能覆盖所有需求的正则表达式,同时会逐步拆解逻辑,帮你理解怎么适配各种情况。
最终正则表达式
(?<=ABC[-\s]?)\d+|(?<=ABC[-\s]?\d+(?:[-\s/]|and\s))\d+
使用时记得加上全局匹配标志 g,这样才能捕获到所有符合条件的数字,而不仅仅是第一个。
正则逻辑拆解
我们把这个正则拆成两部分,用|(或)连接,分别处理两种核心场景:
1. 匹配ABC直接跟随的数字
(?<=ABC[-\s]?)\d+
(?<=...):正向零宽断言,用来确保我们要匹配的数字前面是ABC的前缀,但不把ABC本身包含在匹配结果里ABC[-\s]?:匹配ABC本身,后面可选跟一个连字符(-)或空格(\s),兼容ABC123、ABC-123、ABC 123三种格式\d+:匹配1个或多个数字,也就是我们要提取的核心内容
2. 匹配ABC关联的无前缀数字
(?<=ABC[-\s]?\d+(?:[-\s/]|and\s))\d+
- 同样用正向零宽断言,确保数字前面是「ABC+数字+分隔符」的结构
ABC[-\s]?\d+:先匹配ABC直接带的数字部分(?:[-\s/]|and\s):非捕获组,匹配各种分隔符:[-\s/]:连字符、空格、斜杠and\s:匹配and(注意后面的空格,避免误匹配其他包含and的单词),如果需要忽略大小写,可以改成(?i)and\s
\d+:匹配后续关联的无ABC前缀的数字
测试示例
我们用你给出的示例和几种典型场景测试:
场景1:ABC直接带数字
输入:
ABC-210293CompletedReports
匹配结果:210293
场景2:ABC数字+斜杠连接的数字
输入:
ABC 1234 / 1134
匹配结果:1234,1134
场景3:ABC数字+连字符连接的数字
输入:
ABC 1234-1134
匹配结果:1234,1134
场景4:ABC数字+and连接的数字
输入:
ABC 1234 and 1134
匹配结果:1234,1134
场景5:多处ABC格式内容
输入:
ABC 567 / 890 and ABC-123 completed
匹配结果:567,890,123
额外适配说明
- 如果需要支持
ABC后面直接跟数字(无空格或连字符,比如ABC1234),当前正则已经覆盖,因为ABC[-\s]?里的?表示可选,所以ABC1234会被匹配到 - 如果需要忽略大小写(比如匹配
abc 123),可以在正则开头加上(?i)标志,变成(?i)(?<=ABC[-\s]?)\d+|(?<=ABC[-\s]?\d+(?:[-\s/]|and\s))\d+ - 如果分隔符还有其他类型(比如
&、or),只需要在(?:[-\s/]|and\s)里添加对应的规则即可,比如改成(?:[-\s/&]|(?:and|or)\s)
内容的提问来源于stack exchange,提问作者Jimenemex
相关产品推荐
相关产品推荐

