如何使用正则表达式在Python中判断一个字符串是否仅包含数字和空格。

11

我正在尝试使用Python(使用正则表达式)编写一些脚本,但我遇到了以下问题:

我需要确保一个字符串仅包含数字和空格,但可以包含任意数量的数字。

也就是说,它应该匹配以下字符串: "213"(一个数字),"123 432"(两个数字),甚至是 "123 432 543 3 235 34 56 456 456 234 324 24"(十二个数字)。

我尝试在这里搜索,但我找到的都是如何从字符串中提取数字(及其相反方法)的内容 - 这对我没什么帮助,无法确保整个字符串仅包含数字(由任意数量的空格分隔)。

有人有解决方案吗?

如果有人知道包含所有特殊字符(例如!$#_-)的类,那将非常好(因为我只需执行 [^ A-Z] [^ a-z] [^special-class] 就可以与不匹配任何字符和特殊符号的内容进行匹配 - 只留下数字和空格(如果我理解正确的话)。

3个回答

17

这段代码将检查字符串是否仅包含数字和空格字符。

if re.match("^[0-9 ]+$", myString):
    print "Only numbers and Spaces"

2
@mb14:不,re.match总是从开头开始匹配。 - RemcoGerlich
您可以在使用或不使用起始锚点的情况下使用它。 - hwnd
1
这也匹配空字符串 - 用 + 替换 * - Jon
@thefourtheye为什么不用if bool(re.search('^[0-9 ]+$', str)):呢? =) - hwnd
@hwnd 这样做的效果是一样的,我们不需要显式地将结果转换为 bool :) - thefourtheye
显示剩余2条评论

8
基本的正则表达式应该是:
/^[0-9 ]+$/

然而,如果您的字符串仅包含空格,它也能正常工作。要检查是否至少有一个数字,您需要使用以下内容。
/^ *[0-9][0-9 ]*$/

您可以在这里进行尝试。

1

我建议使用不需要使用正则表达式的方法:

>>> s = "12a 123"
>>> to_my_linking = lambda x: all(var.isdigit() for var in x.split())
>>> to_my_linking(s)
False
>>> s = "1244 432"
>>> to_my_linking(s)
True
>>> a = "123 432 543 3 235 34 56 456 456 234 324 24"
>>> to_my_linking(a)
True

如果你正在使用lambda,它只是一种简单的方法来创建一行函数。如果我们使用def编写它,那么它会像这样:

>>> def to_my_linking(number_sequence):
...     return all(var.isdigit() for var in number_sequence.split())
...     

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接