擅长:python、mysql、java
<p>没有经过彻底测试,但我认为这应该有效:</p>
<pre><code>import re
words = ['ct', 'cat', 'cbbt', 'caaabbct', 'cbbccaat', 'cbcbbaat', 'caaccbabbt']
pat = re.compile(r'^c(?:([abc])\1*(?!.*\1))*t$')
for w in words:
print w, "matches" if pat.match(w) else "doesn't match"
#ct matches
#cat matches
#cbbt matches
#caaabbct matches
#cbbccaat matches
#cbcbbaat doesn't match
#caaccbabbt doesn't match
</code></pre>
<p>这将匹配<code>a</code>、<code>b</code>或{<cd3>}(这是<code>([abc])\1*</code>部分)的运行,而负lookahead <code>(?!.*\1)</code>确保运行后不存在该字符的其他实例。在</p>
<p>(编辑:修正了解释中的一个错误)</p>