<p>Burhan建议的另一种方法是利用反向引用的能力。您可以阅读有关反向引用<a href="http://www.regular-expressions.info/backref.html" rel="nofollow noreferrer">here</a>的更多信息。在</p>
<pre><code>import re
# Input string
string = '(tagname1, tagvalue1),(tagname2,tagvalue2), ( tagname3, tagvalue3 ), (tag name4,tag value4)'
# Regular expression pattern
pattern = re.compile(r"\(([a-z0-9 ]+), ?([a-z0-9 ]+)\)", re.I)
list_of_tupples = []
for matched_object in pattern.finditer(string):
list_of_tupples.append((matched_object.group(1), matched_object.group(2)))
</code></pre>
<p>您可以看到正则表达式演示<a href="https://regex101.com/r/NYjhi4/1" rel="nofollow noreferrer">here</a>。在</p>
<p><strong>注意:</strong></p>
<p>我还使用了use<code>pattern.finditter()</code>,因为这样您可以通过文本中的所有模式发现进行迭代。来自<em>芬代尔</em>文件:</p>
<blockquote>
<p>re.finditer(pattern, string, flags=0) Return an iterator yielding
MatchObject instances over all non-overlapping matches for the RE
pattern in string. The string is scanned left-to-right, and matches
are returned in the order found. Empty matches are included in the
result unless they touch the beginning of another match.</p>
</blockquote>