擅长:python、mysql、java
<p>不带正则表达式的解决方案:</p>
<pre><code>def convert (s):
if s.lower().startswith('0x'):
s = '16#' + s[2:]
elif s.startswith('0'):
s = '8#' + s[1:]
elif '#' not in s:
s = '10#' + s
base, num = s.split('#', 1)
return int(num, int(base))
</code></pre>
<pre><code>>>> testcases = [('0x123', 291), ('012', 10), ('36#foo', 20328)]
>>> for s, n in testcases:
print(s, n, n == convert(s))
0x123 291 True
012 10 True
36#foo 20328 True
</code></pre>