<p>这个<a href="http://pythex.org/?regex=(%5Cw%2B)%20was%20one%20of%20the%20few%20(painters%7Cactors)%20in%20(%5B%24k%7CK%5Da%5Cw%2B)%20whom%20everybody%20admired.%20&test_string=Jack%20was%20one%20of%20the%20few%20painters%20in%20Kansan%20whom%20everybody%20admired.%20&ignorecase=0&multiline=0&dotall=0&verbose=0" rel="nofollow">regex</a>抓住了你的例子。你知道吗</p>
<p><code>(\w+) was one of the few (painters|actors) in ([$k|K]a\w+) whom everybody admired.</code></p>
<p><strong>编辑</strong>添加了如何检查组的示例</p>
<p>假设你想检查这个名字是否在一个有1000个名字的列表中,正则表达式是不够的。您可以捕获这个正则表达式的结果,并添加额外的检查。你知道吗</p>
<pre><code>import re
input_strs = ['Jack was one of the few painters in Kansan whom everybody admired.',
'Michael was one of the few actors in Karlsruhe whom everybody admired.']
allowed_names = ['Michael', 'John']
pattern = re.compile(r'(\w+) was one of the few (painters|actors) in ([$k|K]a\w+) whom everybody admired.')
for input in input_strs:
m = pattern.match(input)
if m:
# check if name is in the list
name = m.group(1)
print('name: ' + name)
if name in allowed_names:
print('ok')
else:
print('fail')
</code></pre>