<p>您还可以使用<a href="https://pypi.org/project/regex/" rel="nofollow noreferrer">PyPi regex module</a>和<a href="https://stackoverflow.com/questions/24534782/how-do-skip-or-f-work-on-regex">SKIP FAIL</a>来匹配和排除匹配结果中不需要的字符</p>
<p>在这种情况下,可以在不应匹配逗号的括号之间匹配1-20</p>
<pre><code>\([^()]{1,20}\)(*SKIP)(*FAIL)|,
</code></pre>
<p><strong>解释</strong></p>
<ul>
<li><code>\(</code>匹配<code>(</code></li>
<li><code>[^()]{1,20}</code>匹配除<code>(</code>或<code>)</code>之外的任何字符的1-20倍</li>
<li><code>\)</code>匹配<code>)</code></li>
<li><code>(*SKIP)(*FAIL)</code>从匹配结果中排除字符</li>
<li><code>|</code>或</li>
<li><code>,</code>匹配一个逗号</li>
</ul>
<p><a href="https://regex101.com/r/ADfutH/1" rel="nofollow noreferrer">Regex demo</a><a href="https://tio.run/##dZAxT8QwDIX3/IqnTgmKql6ZGWA4dIIBCZjuDin03GsESarESIeA315c9QYWpjif7fdsj588pHg5TT6MKTMyHemkVMEVqqq6JYaPBzoh9eDBF3QpBGfx@sHQMfEC7YJNjbkh8UB5IQXv/o0knzJsyhYru0IL29bqT7fBzfMT9PE/M98jpEzCXETboBtcdh1TLnCCfSz@MGcJo/yjBIWKkfHV6FjKoiyTq53evmiz/1rZtvnZGX3xeLd5kGd9vbk337ZS4u07mjffhrqwy6wbg15GD@KxXKbu5yrR1Gdpi2L2asw@sj4LmGn6BQ" rel="nofollow noreferrer">Python demo</a></p>
<p><strong>示例代码</strong></p>
<pre><code>import regex
s = """Get index of this comma, but (not this , comma). Get other commas like , or ,or, 1,1 2 ,2.
(not this ,) BUT (get index of this comma, if more than 20 characters are inside the parentheses)"""
pattern = r"\([^()]{1,20}\)(*SKIP)(*FAIL)|,"
indices = [m.start(0) for m in regex.finditer(pattern, s)]
print(indices)
</code></pre>
<p><strong>输出</strong></p>
<pre><code>[23, 71, 76, 79, 82, 87, 132]
</code></pre>