<p>处理此表达式最可靠的方法可能是在表达式可能增长时添加边界。例如,我们可以尝试创建char列表,从中收集所需的数据:</p>
<pre><code>(?=\().([a-z]+)([\s,;]+?)([0-9]+)(?=\)).
</code></pre>
<h3><a href="https://regex101.com/r/ZvjOVg/1" rel="nofollow noreferrer">DEMO</a></h3>
<h3>测试</h3>
<pre><code># coding=utf8
# the above tag defines encoding for this document and is for Python 2.x compatibility
import re
regex = r"(?=\().([a-z]+)([\s,;]+?)([0-9]+)(?=\))."
test_str = "some text we wish before (Author) some text we wish after (Author 2000) some text we wish before (Author) some text we wish after (Author, 2000) some text we wish before (Author) some text we wish after (Author 2000) some text we wish before (Author) some text we wish after (Author; 2000)"
matches = re.finditer(regex, test_str, re.MULTILINE | re.IGNORECASE)
for matchNum, match in enumerate(matches, start=1):
print ("Match {matchNum} was found at {start}-{end}: {match}".format(matchNum = matchNum, start = match.start(), end = match.end(), match = match.group()))
for groupNum in range(0, len(match.groups())):
groupNum = groupNum + 1
print ("Group {groupNum} found at {start}-{end}: {group}".format(groupNum = groupNum, start = match.start(groupNum), end = match.end(groupNum), group = match.group(groupNum)))
# Note: for Python 2.7 compatibility, use ur"" to prefix the regex and u"" to prefix the test string and substitution.
</code></pre>
<h3>演示</h3>
<p/><div class="snippet" data-lang="js" data-hide="false" data-console="true" data-babel="false">
;
<div^{cl2}$
;
^{pr3}$
;
</div>
;
</div>
;
<h3>正则表达式电路</h3>
<p><a href="https://jex.im/regulex/#!flags=&re=%5E(a%7Cb)*%3F%24" rel="nofollow noreferrer">jex.im</a>可视化正则表达式:</p>
<p><a href="https://i.stack.imgur.com/JhtoS.png" rel="nofollow noreferrer"><img src="https://i.stack.imgur.com/JhtoS.png" alt="enter image description here"/></a></p>