<p>您的<code>ab</code>模式是错误的,您的<code>||</code>内部允许空字符串匹配,您只需要一个<code>|</code>即可定义替换</p>
<p>接下来,如果没有正确地对模式进行分组,则需要用<code>^(?:p1|p2)$</code>包装<code>p1|p2</code></p>
<p>所以,如果您想声明<code>ab</code>模式,您将使用</p>
<pre class="lang-py prettyprint-override"><code>ab = js_regex.compile(r"^(?:[A-Z]{2}[A-Z0-9]{9}[0-9]|\$[A-Z]{3})$")
</code></pre>
<p>您可以这样使用此模式:</p>
<pre class="lang-py prettyprint-override"><code>def validate(arr):
return (all(map(ab.search, arr)) or all(map(lambda x: not ab.search(x), arr)) )
</code></pre>
<p>请参见Python演示:</p>
<pre class="lang-py prettyprint-override"><code>import js_regex, re
a = js_regex.compile(r"^[A-Z]{2}[A-Z0-9]{9}[0-9]$")
b = js_regex.compile(r"^\$[A-Z]{3}$")
ab = re.compile(f'{a.pattern}|{b.pattern}') # Build the ab pattern from the two above
def validate(arr):
return (all(map(ab.search, arr)) or all(map(lambda x: not ab.search(x), arr)) )
l1 = ["BED", "KLO", "BN"]
l2 = ["A", "B", "C"]
l3 = ["xxx", "$AUD"]
l4 = ['XX46434G8630', '$USD', 'XX46434V7047']
print(validate(l1), validate(l2), validate(l3), validate(l4), sep="\n")
</code></pre>
<p>输出:</p>
<pre><code>True
True
False
True
</code></pre>