只匹配字符串中的数字的正则表达式?

7
我可以为只包含空格或整数的字符串找到正则表达式。 该字符串是从键盘输入的。它可以包含除\n之外的任何内容(但我想这并不重要),但我们可以专注于ASCII,因为它应该是英语句子。 以下是一些示例:

OK:

'1'
'2 3'
'   3 56 '
'8888888       333'
' 039'

不可以:

'a'
'4 e'
'874 1231 88 qqqq 99'
' shf ie sh f 8'

我有这个代码可以找到数字:

t = [int(i) for i in re.findall(r'\b\d+\b', text)]

但我无法得到正则表达式。我的正则表达式目前是re.match(r'(\b\d+\b)+', text),但它不起作用。

尝试使用 re.match(r'\s*\d+(?:\s+\d+)*\s*$', s) - Wiktor Stribiżew
什么是文本?如果你在一个大的文本中查找,'只包含空格或整数' 是什么意思? - MegaIng
它不起作用 :/ 我仍在尝试弄清楚你的代码在做什么(但感谢你(半法国和波兰人))。 - Yann Droy
文本是一个字符串,可以包含您在键盘上输入的所有内容(但不包括\n,因为它是用户输入)。 - Yann Droy
我的正则表达式如下所示:点击此处 - Wiktor Stribiżew
3个回答

21
>>> re.match(r'^([\s\d]+)$', text)

您需要在正则表达式中加入开头 (^) 和结尾 ($) 标记。否则,字符串中包含这些字符的部分将匹配,导致错误的正向匹配。

你需要在正则表达式中放置开始符号(^)和结束符号($)。否则,带有这些字符的字符串部分将匹配,导致错误的正向匹配。


请注意,\s 匹配 \n,而 * 也可以匹配零个字符。我认为您也可以不使用捕获组 () - The fourth bird
捕获组并不是必需的,但我认为它会有助于可读性。我将把 * 调整为 +:感谢您的敏锐观察。 - moo

4

也可以使用,但是@Mark的答案稍微短一些。不过还是感谢你让我发现了这个非常棒的正则表达式网站!!! - Yann Droy
@YannDroy 两者的区别在于,我的正则表达式要求至少有一个数字,而你提到的答案也接受空字符串或仅由空格组成的字符串。当然,具体取决于哪种更适合您的需求。 - bobble bubble

4

要匹配仅空格或数字,您可以使用:

^[ 0-9]+$

这将从字符串的开头 ^ 使用字符类 [ 0-9]+ 匹配一个或多个空格或数字直到字符串的结尾 $


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