首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用正则表达式从Python中的字符串中提取数字

使用正则表达式从Python中的字符串中提取数字
EN

Stack Overflow用户
提问于 2019-10-02 08:54:07
回答 2查看 488关注 0票数 1

我试图用Python编写一个正则表达式,从以下字符串中提取两个数字:

  • (总共发布了64种工具;总共使用了8种工具)
  • (总共发布了49种工具;总共使用了13种工具)

这是为了对正在使用的工具进行概述。因此,我只需要字符串中的数字。在字符串中,只有"tool“一词会根据工具的数量而变化。我尝试过几种解决方案来编译字符串,但很难最终确定解决方案。

代码语言:javascript
复制
[...]
       regexToolUsage = re.compile(r"\((\S)(\d+)(\S)(\d+)(\d)\)"))

[...]
       if ToolUsage != None:
            ToolsInTotal = ToolUsage.group(2).strip()
            ToolsInUse = ToolUsage.group(4).strip()

我期望输出64和8,但收到以下错误: UnboundLocalError:赋值前引用的局部变量'ToolsInTotal‘。

我还尝试了以下表达方式:

re.compile(r"(Total of)(.+)( issued; Total of)(.+)(in use)\)")

这提取了"64工具“和"8工具”,但我只需要一个数字。我不能添加“工具”一词,因为如果它只是“1个工具”,就不会得到承认。有人能提供帮助吗?

EN

回答 2

Stack Overflow用户

发布于 2019-10-02 08:58:41

以下是从字符串中获取所有整数的方法:

代码语言:javascript
复制
import re


s = "Total of 64 tools issued; Total of 8 tools in use"

r = re.findall("\d+", s)  # 'r' is now ['64', '8']
票数 1
EN

Stack Overflow用户

发布于 2019-10-02 12:45:54

代码语言:javascript
复制
import re

text = """(Total of 64 tools issued; Total of 8 tools in use)
(Total of 49 tools issued; Total of 13 tools in use)
(Total of 3 tools issued; Total of 1 tool in use)"""

l = [
    (m.group(1), m.group(2))
    for m in re.finditer(r'\(Total of (\d+) tools? issued; Total of (\d+) tools? in use\)', text)
    ]
print(l)

指纹:

代码语言:javascript
复制
[('64', '8'), ('49', '13'), ('3', '1')]
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58198275

复制
相关文章

相似问题

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