<p>你可以用</p>
<pre><code>re.findall(r'\([^()\d]*\d[^()]*\)', s)
</code></pre>
<p>参见<a href="https://regex101.com/r/M5RlSd/1" rel="nofollow noreferrer">regex demo</a></p>
<p><strong>细节</strong></p>
<ul>
<li><code>\(</code>-a<code>(</code>字符</li>
<li><code>[^()\d]*</code>-0个或更多字符,而不是<code>(</code>、<code>)</code>和数字</li>
<li><code>\d</code>-一个数字</li>
<li><code>[^()]*</code>-0个或更多字符,而不是<code>(</code>,<code>)</code></li>
<li><code>\)</code>-a<code>)</code>字符。你知道吗</li>
</ul>
<p>参见<a href="https://jex.im/regulex/#!flags=&re=%5C(%5B%5E()%5Cd%5D*%5Cd%5B%5E()%5D*%5C)" rel="nofollow noreferrer">regex graph</a>:</p>
<p><a href="https://i.stack.imgur.com/qiYfK.png" rel="nofollow noreferrer"><img src="https://i.stack.imgur.com/qiYfK.png" alt="enter image description here"/></a></p>
<p><a href="https://ideone.com/r4mh5y" rel="nofollow noreferrer">Python demo</a>:</p>
<pre><code>import re
rx = re.compile(r"\([^()\d]*\d[^()]*\)")
s = "Some (Author) and (Author 2000)"
print(rx.findall(s)) # => ['(Author 2000)']
</code></pre>
<p>要获得不带括号的结果,请添加捕获组:</p>
<pre><code>rx = re.compile(r"\(([^()\d]*\d[^()]*)\)")
^ ^
</code></pre>
<p>见<a href="https://ideone.com/3ftMsM" rel="nofollow noreferrer">this Python demo</a>。你知道吗</p>