<p>首先,您的regex甚至不试图捕获任何东西,除了四个点数字,所以它当然不会匹配任何其他东西,比如最后的<code>/32</code>。如果你只是在结尾加上<code>/\d{1,2}</code>,它会解决这个问题:</p>
<pre><code>(?:\d{1,3}\.){3}\d{1,3}/\d{1,2}
</code></pre>
<p><img src="https://www.debuggex.com/i/7bQpjvtFIqCLPck1.png" alt="Regular expression visualization"/></p>
<p><a href="https://www.debuggex.com/r/7bQpjvtFIqCLPck1" rel="nofollow">Debuggex Demo</a></p>
<hr/>
<p>但是,如果您对正则表达式的理解不足以理解这一点,那么您可能不应该将正则表达式用作永远无法调试或扩展的“魔法”。使用<code>str</code>方法(如<code>split</code>或<code>find</code>)会更详细一些,但对于新手来说可能更容易理解:</p>
<pre><code>for line in file:
for part in line.split()
try:
address, network = part.split('/')
a, b, c, d = address.split('.')
except ValueError:
pass # not in the right format
else:
# do something with part, or address and network, or whatever
</code></pre>
<hr/>
<p>另一方面,根据实际使用这些内容的情况,您可能希望使用<a href="https://docs.python.org/3/library/ipaddress.html" rel="nofollow">^{<cd6>}</a>模块(或<a href="https://pypi.python.org/pypi/ipaddress/1.0.6" rel="nofollow">the backport on PyPI</a>用于2.6-3.2),而不是字符串解析:</p>
<pre><code>>>> import ipaddress
>>> s = '10.1.1.1/32'
>>> a = ipaddress.ip_network('10.1.1.1/32')
</code></pre>
<p>您可以将其与以上任一项结合起来:</p>
<pre><code>for line in file:
for part in line.split():
try:
a = ipaddress.ip_network(part)
except ValueError:
pass # not the right format
else:
# do something with a and its nifty methods
</code></pre>