擅长:python、mysql、java
<p>是的,我相信这是可能的。在</p>
<p>为了让你开始,这就是我要解决的问题。在</p>
<p>通过查找与所有拒绝值的开头匹配的最长字符串来计算根:</p>
<pre><code>>>> root = ''
>>> for c in hablar['yo']:
... if all(v.startswith(root + c) for v in hablar.itervalues()):
... root += c
... else:
... break
...
>>> root
'habl'
</code></pre>
<p>单词的剩余部分构成了一个<code>list</code>的结尾。在</p>
^{pr2}$
<p>然后,您可能需要剔除重复项:</p>
<pre><code>>>> unique_endings = set(endings)
>>> print unique_endings
set(['abas', 'abais', '\xc3\xa1bamos', 'aban', 'aba'])
</code></pre>
<p>然后用管道将这些末端连接在一起:</p>
<pre><code>>>> conjoined_endings = '|'.join(unique_endings)
>>> print conjoined_endings
abas|abais|ábamos|aban|aba
</code></pre>
<p>形成正则表达式是一个简单的问题,它将根和括号中的连接结尾字符串结合起来:</p>
<pre><code>>>> final_regex = '{}({})'.format(root, conjoined_endings)
>>> print final_regex
habl(abas|abais|ábamos|aban|aba)
</code></pre>