<p>如果您可以使用<code>re</code>,那么您不必担心通配符,而是让<a href="https://docs.python.org/3/library/re.html#re.match" rel="nofollow noreferrer">^{<cd2>}</a>为您做一些艰苦的工作:</p>
<pre><code># Rules input (this could also be read from file)
lines = """002029568,allow
0011*,allow
001180001,block
"""
# Parse rules from string
rules = []
for line in lines.split("\n"):
line = line.strip()
if not line:
continue
identifier, ruling = line.split(",")
rules += [(identifier, ruling)]
# Get rulings for specific number
def rule(number):
from re import match
rulings = []
for identifier, ruling in rules:
# Replace wildcard with regex .*
identifier = identifier.replace("*", ".*")
if match(identifier, number):
rulings += [ruling]
return rulings
print(rule("001180000"))
print(rule("001180001"))
</code></pre>
<p>打印内容:</p>
<pre><code>['allow']
['allow', 'block']
</code></pre>
<p>函数将返回一个规则列表。它们的顺序与它们在配置行中出现的顺序相同。所以你可以很容易地选择最后一条或第一条你感兴趣的规则。你知道吗</p>
<p>或者过早地打破循环,如果你可以假设没有两个裁决会干涉。你知道吗</p>
<p>示例:</p>
<ul>
<li><code>001180000</code>只与<code>0011*,allow</code>匹配,因此唯一适用的规则是<code>allow</code>。你知道吗</li>
<li><code>001180001</code>首先由<code>0011*,allow</code>匹配,所以您将得到<code>allow</code>和前面一样。但是,它也与<code>001180001,block</code>匹配,因此<code>block</code>也将被添加到规则中。你知道吗</li>
</ul>