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

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

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

I want this nr A7A3G1A but not this ANTENNA

所以我应该得到 A7A3G1A 而不是 ANTENNA。匹配两者的正则表达式为:[A-Z0-9]{7}。是否有可能以某种方式不允许仅使用大写字母并仍然提取第一个匹配项?

你可以使用这个正则表达式,

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

Demo

此处,单词边界 \b 确保仅匹配整个单词,(?![A-Z]{7}) 负向前瞻确保匹配的内容不全是大写字母,并且 [A-Z0-9]{7} 准确捕获单词包含大写字母和数字的七个字符。

另一种选择是使用正向先行 (?=,然后确保至少匹配一位数字。

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

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

Regex demo