正则表达式仅用于字符串中的数字?

Posted

技术标签:

【中文标题】正则表达式仅用于字符串中的数字?【英文标题】:regex for only numbers in string? 【发布时间】:2018-10-15 01:41:24 【问题描述】:

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

好的:

'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) 什么是文本?如果您在大文本中搜索,“仅包含空格或整数”是什么意思? 它不起作用:/我仍在试图弄清楚你在做什么(但 Dziekuje(一半法国和波兰人)) 文本是一个字符串,可以包含您可以在键盘上输入的所有内容(但是\n,因为它是用户输入) 我上面的正则表达式works like this. 【参考方案1】:

(对于初学者) 注意:'+' "导致生成的 RE 匹配前面 RE 的 1 次或多次重复。ab+ 将匹配 'a' 后跟任何非零数量的 'b';它不会匹配只是'一个'。” - 来自https://docs.python.org/3/library/re.html#regular-expression-syntax

即(字符串 = '4123'):

    如果我们有类似 r"^[0-9]$" 的模式:这将导致仅匹配字符串中的第一个字符,忽略字符串的其余部分,并返回 '4'。 如果我们有类似 r"^[0-9]+$" 的模式:这将导致匹配整个字符串并返回 '4123'。

对于另一个字符串 (string = '412e'),模式 r"^[0-9]+$" 将返回 'None'。

【讨论】:

欢迎回到 Stack Overflow。请阅读How to Answer 并记住这不是论坛。没有必要或不希望尝试向多年前提出和回答的问题添加额外信息,因为猜测它可能会澄清一些事情。您在此处描述的内容仅解释了问题的一小部分,并且 OP 在询问时显然已经理解 如果您认为另一个答案的写作方式不清楚或不够充分,您应该对那个答案发表评论。 我偶然发现了这个问题,我认为它可能会对其他初学者有所帮助...如果您认为它没有用,请删除它。谢谢!【参考方案2】:
>>> re.match(r'^([\s\d]+)$', text)

你需要把开始(^)和行尾($)字符放入。否则,字符串中带有字符的部分会匹配,导致误报匹配

【讨论】:

请注意,\s 匹配 \n* 也将不匹配任何字符。我认为您也可以不使用捕获组() 捕获组不是必需的,但我认为它有助于提高可读性。我会将* 调整为+:感谢您的鹰眼。【参考方案3】:

这样的事情怎么样

^ *\d[\d ]*$

See demo at regex101

模式要求至少包含一位数字。

【讨论】:

也可以,但@Mark 的回答要短一些。但是,感谢您让我发现这个很棒的正则表达式网站!!! @YannDroy 不同之处在于,我的正则表达式至少需要一位数字,您提到的答案也接受空字符串或仅包含空格的字符串。当然取决于什么更适合您的需求。【参考方案4】:

只匹配一个空格或一个数字,你可以使用:

^[ 0-9]+$

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

【讨论】:

以上是关于正则表达式仅用于字符串中的数字?的主要内容,如果未能解决你的问题,请参考以下文章

用于检查字符串是不是严格字母数字的正则表达式

仅用于字母数字的正则表达式不起作用

用于文本框验证的 HTML5 正则表达式模式:仅允许字母、空格和某些字符

用于验证特定模式的正则表达式

用于验证本地化字符串中的字母和数字的正则表达式

用于测试密码强度的正则表达式