Извлечение целых чисел в квадратных скобках - PullRequest
0 голосов
/ 10 февраля 2020

Я пытаюсь извлечь целые числа из строки, используя регулярные выражения в Python. Таким образом, между числом и скобками может быть пробел, но нет другого символа, кроме тех, которые составляют целое число. Мой код выглядит так:


import re
s = "  afd [asd] [12 ] [a34]  [ -43 ]tt [+12]xxx"
print(re.findall(r"\s+\[\w+\]\s\[(\d+)\s\]\s\[\w+\]\s+\[\s(-\d+)\s\]\w+\s\[\+(\d+)\]\w+",s))

Вышеприведенный код печатает:


[('12', '-43', '12')]

Однако я хочу, чтобы вывод не был в форма кортежа или тройка в приведенном выше случае, но в списке, например:


[12, -43, 12]

Ответы [ 2 ]

1 голос
/ 10 февраля 2020

Вы можете сделать это следующим образом:

import re
s = "  afd [asd] [12 ] [a34]  [ -43 ]tt [+12]xxx"
rv = re.findall(r"\s+\[\w+\]\s\[(\d+)\s\]\s\[\w+\]\s+\[\s(-\d+)\s\]\w+\s\[\+(\d+)\]\w+",s)
lst = [int(x) for t in rv for x in t]

Это будет l oop по всем кортежам в rv и добавит каждое целое число в новый список, lst. Выход в этом случае:

>>> lst
[12, -43, 12]
0 голосов
/ 10 февраля 2020

Другим вариантом соответствия значений может быть сокращение шаблона и использование re.findall

\[\s*\+?(-?\d+)\s*\]

Regex demo | Python демо

Например

import re

regex = r"\[\s*\+?(-?\d+)\s*\]"
test_str = "afd [asd] [12 ] [a34]  [ -43 ]tt [+12]xxx"

print(re.findall(regex, test_str))

Выход

['12', '-43', '12']
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...