如何编写匹配单词后接连字符/空格加大写字母数字组合的正则表达式
正则匹配方案
原正则存在的问题
- 字符集
[-|\s]写法错误:[]内不需要|表示或,此处的|会被识别为普通匹配字符,反而会漏掉合法场景 - 未考虑分隔符(连字符/空格)前后可能存在多余空白,无法覆盖
NRG -CC009、NRG - LU005这类带中间空格的场景 - 后续规则
[A-Z]+[\d@]+要求大写字母在前、数字在后,无法匹配大写字母和数字穿插的场景(比如示例中的ARST2031) - 未添加非句首的匹配限制
可用正则表达式
Python基础写法(完整匹配目标片段):
r'(?<!^)\b\w+(?:\s*[- ]\s*)[A-Z0-9]+\b'
如果需要分别提取前面的单词和后面的大写数字组合,可以改为带捕获组的版本:
r'(?<!^)\b(\w+)(?:\s*[- ]\s*)([A-Z0-9]+)\b'
规则说明
(?<!^):否定后视断言,确保匹配内容不在整句开头\b:单词边界,避免匹配到单词内部的片段\w+:匹配前面的单词部分(?:\s*[- ]\s*):非捕获组,匹配分隔部分:允许连字符或空格的前后存在任意数量的空白,覆盖所有示例中的分隔场景[A-Z0-9]+:匹配全大写字母与数字的任意组合,支持两者穿插- 尾部
\b:避免匹配到不完整的后缀内容
覆盖验证
以下所有示例均可正常匹配:
- Alliance-A071801
- NRG-BN009
- NRG -CC009
- NRG CC009
- COG- ARST2031
- ETCTN-10186
- NRG - LU005
内容的提问来源于stack exchange,提问作者Ben1234
相关产品推荐
相关产品推荐

