擅长:python、mysql、java
<p>下面是一种基于正则表达式的方法,使用带有回调逻辑的<code>re.sub</code>:</p>
<pre class="lang-py prettyprint-override"><code>word_list = ['foo', 'bar']
regex = r'\b(?:' + '|'.join(word_list) + r')\b' # \b(?:foo|bar)\b
string = 'alpha bravo (charlie foo bar delta) foxtrot'
def repl(m):
if m.group(1):
return ' '.join(re.findall(regex, m.group(1)))
else:
return m.group(0)
print(re.sub(r'\((.*?)\)|\w+', repl, string))
</code></pre>
<p>这张照片是:</p>
<pre><code>alpha bravo foo bar foxtrot
</code></pre>
<p>为了说明原因,我们对以下模式执行全局正则表达式搜索:</p>
<pre class="lang-regex prettyprint-override"><code>\((.*?)\)|\w+
</code></pre>
<p>这将首先尝试匹配括号中的任何术语。如果它找到这样一个匹配项,那么它将把整个匹配项传递给回调函数<code>repl()</code>。此回调函数将在单词列表中使用<code>re.findall</code>,仅保留括号中所需的匹配项。否则,上面的正则表达式一次只能找到一个单词</p>