首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在Python中从字符串中提取数字?

如何在Python中从字符串中提取数字?
EN

Stack Overflow用户
提问于 2010-11-27 08:00:41
回答 15查看 1.3M关注 0票数 560

我想提取字符串中包含的所有数字。正则表达式和isdigit()方法,哪个更适合这个目的?

示例:

代码语言:javascript
复制
line = "hello 12 hi 89"

结果:

代码语言:javascript
复制
[12, 89]
EN

回答 15

Stack Overflow用户

回答已采纳

发布于 2010-11-27 09:14:14

如果只想提取正整数,请尝试以下操作:

代码语言:javascript
复制
>>> txt = "h3110 23 cat 444.4 rabbit 11 2 dog"
>>> [int(s) for s in txt.split() if s.isdigit()]
[23, 11, 2]

我认为这比正则表达式示例更好,因为您不需要另一个模块,而且它更具可读性,因为您不需要解析(和学习) regex mini-language

这将不识别浮点数、负整数或十六进制格式的整数。如果你不能接受这些限制,jmnas's answer below可以解决这个问题。

票数 619
EN

Stack Overflow用户

发布于 2010-11-27 08:04:22

我会使用regexp:

代码语言:javascript
复制
>>> import re
>>> re.findall(r'\d+', 'hello 42 I\'m a 32 string 30')
['42', '32', '30']

这也将匹配来自bla42bla的42。如果您只想使用单词边界(空格、句点、逗号)分隔数字,则可以使用\b:

代码语言:javascript
复制
>>> re.findall(r'\b\d+\b', 'he33llo 42 I\'m a 32 string 30')
['42', '32', '30']

要以数字列表而不是字符串列表结束:

代码语言:javascript
复制
>>> [int(s) for s in re.findall(r'\b\d+\b', 'he33llo 42 I\'m a 32 string 30')]
[42, 32, 30]
票数 590
EN

Stack Overflow用户

发布于 2015-04-12 02:07:30

这有点晚了,但是您也可以扩展正则表达式来说明科学记数法。

代码语言:javascript
复制
import re

# Format is [(<string>, <expected output>), ...]
ss = [("apple-12.34 ba33na fanc-14.23e-2yapple+45e5+67.56E+3",
       ['-12.34', '33', '-14.23e-2', '+45e5', '+67.56E+3']),
      ('hello X42 I\'m a Y-32.35 string Z30',
       ['42', '-32.35', '30']),
      ('he33llo 42 I\'m a 32 string -30', 
       ['33', '42', '32', '-30']),
      ('h3110 23 cat 444.4 rabbit 11 2 dog', 
       ['3110', '23', '444.4', '11', '2']),
      ('hello 12 hi 89', 
       ['12', '89']),
      ('4', 
       ['4']),
      ('I like 74,600 commas not,500', 
       ['74,600', '500']),
      ('I like bad math 1+2=.001', 
       ['1', '+2', '.001'])]

for s, r in ss:
    rr = re.findall("[-+]?[.]?[\d]+(?:,\d\d\d)*[\.]?\d*(?:[eE][-+]?\d+)?", s)
    if rr == r:
        print('GOOD')
    else:
        print('WRONG', rr, 'should be', r)

给所有的好!

此外,您还可以查看AWS Glue built-in regex

票数 100
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4289331

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档