Как составить список чисел в скобках с Regex с Python - PullRequest
0 голосов
/ 25 апреля 2019

Я пытаюсь использовать Regex, чтобы найти все числа в скобках, например, с помощью этого ввода:

"PO = 19 AND TR = 12 AND CD NOT IN (23, 45, 98, 34, 18)"

Я хочу это:

[23, 45, 98, 34, 18]

Я пробовал это:

pattern = re.compile(r"\((\d+)\)")
final = list(pattern.findall("PO = 19 AND TR = 12 AND CD NOT IN (23, 45, 98, 34, 18)"))

И он возвращает только пустые списки

Ответы [ 5 ]

3 голосов
/ 25 апреля 2019

Вы можете использовать положительный прогноз:

re.findall(r'\d+(?=[^(]*\))', s)

, так что при s = "PO = 19 AND TR = 12 AND CD NOT IN (23, 45, 98, 34, 18)" возвращается:

['23', '45', '98', '34', '18']

или, если вы предпочитаете, чтобы элементы списка были целыми числами, вы можете сопоставить их с int:

list(map(int, re.findall(r'\d+(?=[^(]*\))', s)))

, который возвращает:

[23, 45, 98, 34, 18]
1 голос
/ 25 апреля 2019

Вы можете использовать этот код, это не самый короткий путь, но он читабелен:

import re
text = "PO = 19 AND TR = 12 AND CD NOT IN (23, 45, 98, 34, 18)"
a = re.search(r'\(.+\)', text).group()
b = re.findall(r'\d+', a)
print(b)

выход:

['23', '45', '98', '34', '18']
1 голос
/ 25 апреля 2019

Вы можете сделать следующее:

my_list = list(map(int, re.findall(r'\((.*?)\)', s)[0].split(',')))

Урожайность:

[23, 45, 98, 34, 18]
1 голос
/ 25 апреля 2019

Если вам нужно использовать RegEx, это одно из решений:

import re
import ast
regex = r" \(( *\d+,*)+\)"

test_str = "PO = 19 AND TR = 12 AND CD NOT IN (23, 45, 98, 34, 18)"

matches = re.finditer(regex, test_str, re.MULTILINE)
for matchNum, match in enumerate(matches, start=1):

    print(list(ast.literal_eval(match.group().strip())))

И вывод:

[23, 45, 98, 34, 18]
1 голос
/ 25 апреля 2019

Я не знаю о регулярных выражениях, но вы можете обойтись без него:

string = "PO = 19 AND TR = 12 AND CD NOT IN (23, 45, 98, 34, 18)"
numbers = []

for s in string.split("(")[1].split(","):
    numbers.append(int(s.rstrip(")")))

print(numbers) # [23, 45, 98, 34, 18]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...