<p>或者,您可以使用or(<code>|</code>)运算符交错来自<code>name</code>捕获和<code>return</code>捕获的结果。为了让正则表达式捕获返回值的别名和返回字符串本身,您可以使用<code>[^"]+</code>将任何不是<code>"</code>的字符分组一次或多次</p>
<pre class="lang-py prettyprint-override"><code>import re
data = '''
if (name == "wheat"):
return "WHEAT"
if (name == "enchanted bread") or (name == "ebread") or (name == "bread"):
return "ENCHANTED_BREAD"
if (name == "hay bale") or (name == "haybale"):
return "HAY_BLOCK"
if (name == "enchanted hay bale") or (name == "ebale") or (name == "ehayblock"):
return "ENCHANTED_HAY_BLOCK"
if (name == "tightly-tied hay bale") or (name == "tightly tied hay bale"):
return "TIGHTLY_TIED_HAY_BALE"
'''
regex = r'\(name == "(?P<opts>[^"]+)"|return\s+"(?P<catg>[^"]+)"'
r_iter = re.finditer(regex, data)
tmp_opts = []
result = {}
for m in r_iter:
if m.group('catg'):
result[m.group('catg')] = tmp_opts
tmp_opts = []
else:
tmp_opts.append(m.group('opts'))
print(result)
</code></pre>
<pre class="lang-py prettyprint-override"><code>{
"WHEAT": ["wheat"],
"ENCHANTED_BREAD": ["enchanted bread", "ebread", "bread"],
"HAY_BLOCK": ["hay bale", "haybale"],
"ENCHANTED_HAY_BLOCK": ["enchanted hay bale", "ebale", "ehayblock"],
"TIGHTLY_TIED_HAY_BALE": ["tightly-tied hay bale", "tightly tied hay bale"],
}
</code></pre>