python中的Regexing帮助

2024-10-05 14:24:37 发布

您现在位置:Python中文网/ 问答频道 /正文

我想知道是否有一种有效的方法来检查一个数字的格式是1\ 2\ 3\ 4\ 5\ 6\ 7\ 8\ 9\ 0,其中'\是一个数字。 例如

192937425462748900

我最初的想法是字符串索引,但我很快发现它太慢了。在python中使用regexing有更好的方法吗?你知道吗

提前谢谢, 阿文德


Tags: 方法字符串格式数字regexing
3条回答

给你,索引很快O(1)

>>> my_number = 1929374254627488900
>>> int(str(my_number)[1::2])
997242480 # actual number
>>> int(str(my_number)[0::2])
1234567890     #format

让我们定义一个要测试的字符串:

>>> 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

My initial thought was string indexing, but I quickly discovered that it was too slow

很可能你没有使用正确的方法

您总是可以使用regex,但是,带跨步的字符串索引可以比使用regex有更好的性能

st = "1929374254627488900"
st[::2] == "1234567890"
Out[93]: True

相关问题 更多 >