正则表达式仅用于字符串中的数字?
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]+
的数字,直到字符串结尾 $
。
【讨论】:
以上是关于正则表达式仅用于字符串中的数字?的主要内容,如果未能解决你的问题,请参考以下文章