<p>实际上,您的错误消息指出了调用<code>re.escape()</code>中的一个问题,该问题可能由<code>cword</code>或{<cd3>}触发。我建议你重写这一部分:</p>
<pre><code>pattern = r'\b' + re.escape(lword) + r'\b.*\b' + re.escape(cword) + r'\b|\b' + re.escape(
cword) + r'\b.*' + re.escape(lword) + r'\b'
</code></pre>
<p>作为:</p>
^{pr2}$
<p>这并不能解决问题本身,但至少你会知道是什么触发了错误。在</p>
<p>另外,如果你所说的“主列表”是指两个列表的串联,那么它的拼写是<code>master_list = list1 + list2</code>。{cd6}是什么意思。在</p>
<p>最后,如果您只想测试一个给定的单词是否属于给定的列表,并根据该单词来自哪个列表分支,那么还有更好的选择。假设您的<code>Li1</code>和<code>Li2</code>列表在循环过程中不会发生变化,那么最好使用一个迭代器来获取(,)对并生成<code>(<identifier>,</code>单词`)元组,即:</p>
<pre><code>def chain(*args):
for identifier, lst in *args:
for word in lst:
yield identifier, word
</code></pre>
<p>然后将<code>for cword in MasterLi</code>替换为:</p>
<pre><code>for identifier, cword in chain(("l1", Li1), ("l2", Li2)):
# various stuff here
if identifier == "l1":
# some processing here
elif identifier == "l2":
# some different processing here
</code></pre>
<p>等等,这将大大节省时间和空间(不需要建立一个巨大的“主列表”,无需进行无用的O(n)查找来找出给定单词来自哪个列表)。在</p>
<p>或者您可以在<code>(<list>, <function>)</code>对上的函数和链中封装“#some processing here”和“some different processing here”,即:</p>
<pre><code>def handleLi1(...):
# some processing here
def handleLi2(...):
# some different processing here
def chain(*args):
for lst, func in *args:
for word in lst:
yield word, func
for cword, func in chain((Li1, handleLi1), (Li2, handleLi2)):
# various stuff here
whatever = func(cword, whatever, arg, needed)
</code></pre>
<p>您只需要确保两个“handler”函数使用相同的参数(如果必须返回某些内容,则返回相同类型的值)</p>