<p>您的问题是regex单独查看每个list元素—它无法“看到”在它查看的当前元素之前/之后有<code>"("</code>和<code>")"</code>元素。你知道吗</p>
<p>我建议事先清理你的名单:</p>
<pre><code>import re
from itertools import chain
listnew = ['E-Textbooks','Dynamic', 'Case', 'Management', '(', 'DCM', ')']
# collect indexes of elements that are ( or ) or things between them
# does not work for ((())) - you might need to do something more elaborate
# if that can happen
remove = []
for i,k in enumerate(listnew):
if k == "(":
remove.append(i)
elif k != ")" and remove and i == remove[-1]+1 and remove[-1] != ")":
remove.append(i)
elif k == ")":
remove.append(i)
data = [k for i,k in enumerate(listnew) if i not in frozenset(remove)]
# did not touch your regex per se - you might want to simplify it using regex101.com
nounbreak = list(chain(*[re.findall(r"\b\w+\b(?![\(\w+\)])", i) for i in data]))
print(nounbreak)
</code></pre>
<p>输出:</p>
<pre><code>['E', 'Textbooks', 'Dynamic', 'Case', 'Management']
</code></pre>
<p>如果您只有简短的列表-您也可以<code>' '.join(..)</code>它们并清除括号内的字符串-请参阅f.e.<a href="https://stackoverflow.com/questions/4894069/regular-expression-to-return-text-between-parenthesis">Regular expression to return text between parenthesis</a>了解如何完成此操作并将其从字符串中删除。你知道吗</p>