擅长:python、mysql、java
<p>你想把<code>|</code>用于who/what是正确的。regex的其余部分非常简单,为了清晰起见,这里有组名,但是您可以使用<code>r"(?:Who|What) is the (.+) of (.+)[?]"</code>。你知道吗</p>
<pre><code>>>> r = r"(?:Who|What) is the (?P<RelationVar>.+) of (?P<ConceptVar>.+)[?]"
>>> l = ['Who is the director of The Dark Knight?', 'What is the capital of China?', 'Who is the president of USA?']
>>> [re.match(r, i).groupdict() for i in l]
[{'RelationVar': 'director', 'ConceptVar': 'The Dark Knight'}, {'RelationVar': 'capital', 'ConceptVar': 'China'}, {'RelationVar': 'president', 'ConceptVar': 'USA'}]
</code></pre>
<p>如果您还想捕获问题使用的是谁或什么,请将<code>(?:Who|What)</code>更改为<code>(Who|What)</code>。你知道吗</p>
<p>实际上,提取数据并将其分配给变量非常简单:</p>
<pre><code>>>> m = re.match(r, "What is the capital of China?")
>>> d = m.groupdict()
>>> relation_var = d["RelationVar"]
>>> concept_var = d["ConceptVar"]
>>> relation_var
'capital'
>>> concept_var
'China'
</code></pre>