擅长:python、mysql、java
<p>让我们先考虑第一个要求:所有字母都是大写的。回想一下,<code>*</code>匹配零次或多次,因此可以很好地匹配空字符串。这就解释了你上面的第二个意外案例。还要注意<code>re.search()</code>匹配字符串中的任何位置,因此需要从head和tail中排除非大写。一种方法是根据模式的开始和结束进行匹配,并设置最小匹配计数以排除空字符串:</p>
<p><code>^[A-Z]{1,}$</code></p>
<p>(请注意,这也将匹配单个大写字母。)</p>
<p>同样的考虑也适用于你的第二个案例。所以你的组合模式是:</p>
<p><code>^[A-Z]{1,}$|^[A-Z]?[a-z]{1,}$</code></p>
<p>或者:</p>
<p><code>^([A-Z]{1,}|[A-Z]?[a-z]{1,})$</code></p>