擅长:python、mysql、java
<p>您似乎希望匹配一个名字,该名字后面有空格和姓氏。在</p>
<p>您可以从您拥有的名称列表中创建一个regex模式,并使用<code>re.findall</code>查找所有不重叠的实例:</p>
<pre><code>import re
first = ['Bob','Steve','Ted','Blake','Harry','Edric','Tommy','Bartholomew']
surnames = ['Fischer','Stinson','McCord','Bone','Harvey']
r = r"\b(?:{})\b(?:\s+(?:{})\b)?".format("|".join(first),"|".join(surnames))
s = """Bob Fischer Steve Ted Stinson Blake Harry McCord
Edric Bone Tommy Harvey Bartholomew"""
print(re.findall(r, s))
# => ['Bob Fischer', 'Steve', 'Ted Stinson', 'Blake', 'Harry McCord', 'Edric Bone', 'Tommy Harvey', 'Bartholomew']
</code></pre>
<p>参见<a href="http://ideone.com/jjPC5p" rel="nofollow noreferrer">Python demo</a></p>
<p><a href="https://regex101.com/r/sxcGVm/1" rel="nofollow noreferrer">regex that is generated with this code</a>:</p>
^{pr2}$
<p>基本上,<code>\b(?:...)\b(?:\s+(?:...)\b)?</code>将备选方案中的一个名字作为一个<em>整词</em>进行匹配(由于<code>\b</code>围绕第一个<code>(?:...)</code>分组结构),然后<code>(?:\s+(?:...)\b)?</code>匹配1个或0个1+空格(<code>?</code>)的量词,后跟任何一个姓氏(同样,由于尾随的<code>\b</code>,作为整词)。在</p>