<p>您可以使用以下方法:匹配并捕获两个组,<code>([xy]*)(b)</code>。然后,一旦找到匹配项,检查组1中的值的长度是否与该值中的唯一字符数相同。如果不是,请从组值的开头删除字符,直到获得长度为唯一字符数的字符串。在</p>
<p>比如:</p>
<pre><code>def findpat(texts, pat):
for t in texts:
m = re.search(pat, t) # Find a match
if m:
tmp = set([x for x in m.group(1)]) # Get the unqiue chars
if len(tmp) == len(m.group(1)): # If Group 1 length is the same
print re.search(pat, t).group() # Report a whole match value
else:
res = m.group(1)
while len(tmp) < len(res): # While the length of the string is not
res = res[1:] # equal to the number of unique chars, truncate from the left
print "{}{}".format(res, m.group(2)) # Print the result
else:
print None # Else, no match
pat = re.compile(r'([xy]*)(b)')
text = ['xyb', 'xb', 'yb', 'yxb','b', 'xyxb']
findpat(text, pat)
# => [xyb, xb, yb, yxb, b, yxb]
</code></pre>
<p>参见<a href="https://ideone.com/2GEI34" rel="nofollow noreferrer">Python demo</a></p>