我想知道是否有一种有效的方法来检查数字的格式是否为1_2_3_4_5_6_7_8_9_0,其中'_'是一个数字。 例如,
1 9 2 9 3 7的 4 2的 5 4 6 2的 7 4的 8 8的 9 0的 0
我的初期虽然是字符串索引,但我很快发现它太慢了。有没有更好的方法在python中使用regexing?
提前致谢, Arvind的
答案 0 :(得分:1)
让我们定义一个要测试的字符串:
>>> q = '1929374254627488900'
现在,让我们测试一下:
>>> q[::2] == '1234567890'
True
匹配。现在,让我们尝试一下不匹配的内容:
>>> q = '1929374254627488901'
>>> q[::2] == '1234567890'
False
这是有效的,因为q[::2]
会返回字符串中的所有其他字符,而这些字符是您有兴趣测试的字符。
假设我们不确定字符串是否都是数字。在这种情况下,我们添加一个测试。这应该通过:
>>> q = '1929374254627488900'
>>> q[::2] == '1234567890' and q.isdigit()
True
然而,由于a
,这应该失败:
>>> q = '19293742546274889a0'
>>> q[::2] == '1234567890' and q.isdigit()
False
我们还可以测试正确的长度:
>>> q = '1929374254627488900'
>>> q[::2] == '1234567890' and q.isdigit() and len(q) == 19
True
答案 1 :(得分:0)
我最初的想法是字符串索引,但我很快就发现了 它太慢了
很可能你没有使用正确的方法
你总是可以使用正则表达式但是,使用步长的字符串索引可以比使用正则表达式具有更好的性能
st = "1929374254627488900"
st[::2] == "1234567890"
Out[93]: True
答案 2 :(得分:0)
在这里,索引是快速O(1)
>>> my_number = 1929374254627488900
>>> int(str(my_number)[1::2])
997242480 # actual number
>>> int(str(my_number)[0::2])
1234567890 #format