正则表达式匹配 X 位数字或字母,但不匹配 X 个字母

Regex to match X digits or letters but not X letters in a row

提问人:Bartłomiej Skwira 提问时间:3/30/2019 更新时间:3/30/2019 访问量:360

问:

我想提取 7 个字符匹配项。每个字符可以是数字或大写字母,但整个匹配不能只是大写字母。示例:假设我有一个测试字符串,如下所示:

I want this nr A7A3G1A but not this ANTENNA

所以我应该得到但不.匹配两者的正则表达式为:.是否有可能以某种方式不允许只允许大写字母并仍然提取第 1 场比赛?A7A3G1AANTENNA[A-Z0-9]{7}

与正则 语言无关的正 则表达式否定

评论

0赞 Toto 3/30/2019
难道只有像这样的数字吗?1234567
0赞 Bartłomiej Skwira 5/6/2019
@Toto不,还必须有字母

答:

2赞 Pushpesh Kumar Rajwanshi 3/30/2019 #1

您可以使用此正则表达式,

\b(?![A-Z]{7})[A-Z0-9]{7}\b

演示

在这里,单词边界确保只匹配整个单词,而否定向前看确保匹配的内容不是全部大写字母,并捕获一个包含大写字母和数字混合的七个字符的单词。\b(?![A-Z]{7})[A-Z0-9]{7}

1赞 The fourth bird 3/30/2019 #2

另一种选择可能是使用积极的前瞻,然后确保匹配至少 1 位数字。(?=

使用单词边界可防止匹配项成为较大单词的一部分。\b

\b(?=[A-Z0-9]{7}\b)[A-Z0-9]+[0-9][A-Z0-9]*

正则表达式演示