擅长:python、mysql、java
<p>您可以使用:</p>
<pre><code>^(\d+(?:$|(?:-\d+)+))
</code></pre>
<p><a href="http://regex101.com/r/sA7sR4" rel="nofollow">See it work here</a>。在</p>
<p>或者,同一regex的Debugex版本:</p>
<pre><code>^(\d+(?:$|(?:-\d+)+))
</code></pre>
<p><img src="https://www.debuggex.com/i/UyryWKxAFQKdU9PP.png" alt="Regular expression visualization"/></p>
<p><a href="https://www.debuggex.com/r/UyryWKxAFQKdU9PP" rel="nofollow">Debuggex Demo</a></p>
<p>也许是更好的选择,因为它是固定在两端的:</p>
^{3}$
<p><img src="https://www.debuggex.com/i/hxJQtigkgG86mpfL.png" alt="Regular expression visualization"/></p>
<p><a href="https://www.debuggex.com/r/hxJQtigkgG86mpfL" rel="nofollow">Debuggex Demo</a></p>
<p>确保使用正确的标志并重新使用方法:</p>
<pre><code>import re
tgt='''
#Match
1
34-1
2-5-2
15-2-3-309-1
# Don't match
1--
--
#$@%^#$@#
dafadf
10-asdf-1
-12-1-
'''
print re.findall(r'^(\d+(?:-\d+)*)$', tgt, re.M)
# ['1', '34-1', '2-5-2', '15-2-3-309-1']
</code></pre>