<p>您可以这样使用一个简单的<code>re.findall</code>:</p>
<pre><code>dict(re.findall(r'\b({})\s*(\d+)'.format("|".join(keys)), ex))
</code></pre>
<p>正则表达式看起来像</p>
<pre><code>\b(phone|fax|mobile)\s*(\d+)
</code></pre>
<p>参见<a href="https://regex101.com/r/Q76jXg/1" rel="nofollow noreferrer">regex demo online</a>。你知道吗</p>
<p><strong>图案细节</strong></p>
<ul>
<li><code>\b</code>-单词边界</li>
<li><code>(phone|fax|mobile)</code>-第1组:列出的单词之一</li>
<li><code>\s*</code>-0+空格</li>
<li><code>(\d+)</code>-第2组:一个或多个数字</li>
</ul>
<p>参见<a href="https://ideone.com/t0SFdJ" rel="nofollow noreferrer">Python demo</a>:</p>
<pre><code>import re
exs = ["miramar road margie shoop san diego ca 12793 manager phone 6035550160 fax 6035550161 mobile 6035550178 marsgies travel wwwmarpiestravelcom",
"david packard electrical engineering 350 serra mall room 170 phone 650 7259327 stanford university fax 650 723 1882 stanford california 943059505 ulateecestanfordedu",
"stanford electrical engineering vijay chandrasekhar electrical engineering 17 comstock circle apt 101 stanford ca 94305 phone 9162210411"]
keys = ['phone', 'fax', 'mobile']
for ex in exs:
res = dict(re.findall(r'\b({})\s*(\d+)'.format("|".join(keys)), ex))
print(res)
</code></pre>
<p>输出:</p>
<pre><code>{'fax': '6035550161', 'phone': '6035550160', 'mobile': '6035550178'}
{'fax': '650', 'phone': '650'}
{'phone': '9162210411'}
</code></pre>