如何在正则表达式中 "match if there is one occurrence but don't match if the pattern appears multiple times"

How to "match if there is one occurrence but don't match if the pattern appears multiple times" in regular expression

我正在尝试匹配采用 XXXX-NNNO 形式的字符串

X:大写字符

N:整数

O: 可选大写字符

例如

ABCD-111 => ABCD-111

ABCD-111 => ABCD-111

ABCD-111A => ABCD-111A

我写了正则表达式 [A-Z]{4}-\d{3}[A-Z]? 但它还包括第一个示例中的 'T' 我不想这样做,我也试过了

正确匹配第一个的

[A-Z]{4}-\d{3}(?=[A-Za-z\s]) 与另一个不匹配。如何编写当且仅当它仅以特定模式的一次重复终止时才匹配的正则表达式

以下正则表达式应该可以工作

[A-Z]{4}-\d{3}(?:[A-Z]\b)?

结尾 (?:[A-Z]\b)? 匹配最后的大写字符 只有 如果它紧跟一个词边界(词的结尾)