Используйте регулярное выражение для извлечения чисел из строки в Python - PullRequest
1 голос
/ 02 октября 2019

Я пытаюсь написать регулярное выражение в Python, которое извлекает два числа из следующих строк:

  • (всего выпущено 64 инструмента; всего используется 8 инструментов)
  • (Всего выпущено 49 инструментов; Всего используется 13 инструментов)

Это предназначено для генерации обзоров количества используемых инструментов. Поэтому мне нужны только цифры из строки. Внутри строки только слово «инструмент» меняется в зависимости от количества инструментов. Я попробовал несколько решений, чтобы скомпилировать строку, но изо всех сил пытаюсь завершить свое решение.

[...]
       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 инструмент». Кто-нибудь может помочь?

Ответы [ 2 ]

0 голосов
/ 02 октября 2019
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)

Отпечатки:

[('64', '8'), ('49', '13'), ('3', '1')]
0 голосов
/ 02 октября 2019

Вот как вы можете получить все целые числа из строки:

import re


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

r = re.findall("\d+", s)  # 'r' is now ['64', '8']
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...