Как преобразовать элементы строки в список с помощью регулярных выражений? - PullRequest
4 голосов
/ 02 июля 2019

В коде, который я пытаюсь написать, я хочу преобразовать строку, содержащую числа, в список, где каждый элемент является номером этой строки.

Я пытался использовать sub, функцию re, но у меня нет нужного результата в конкретном случае.

x = "8 1 2 9 12"
liste= []
final = []

for s in x:
    liste.append(re.sub('\s+',"", s))
for element in liste:
    if element =="":
        liste.remove("")

for b in liste:
    if b != 'X':
        final += [int(b)]
    else:
        final+=["X"]

Я ожидаю выход [8,1,2,9,12], но фактический вывод [8,1,2,9,1,2].

Ответы [ 3 ]

5 голосов
/ 02 июля 2019

Вы можете сделать это очень легко, используя разделение и преобразование.Необходимым условием для использования этого подхода является то, что строка должна содержать только цифры и пробелы и никакие другие символы не должны присутствовать.

>>> li = "8 1 2 9 12"
>>> result = [int(i) for i in li.split(' ')]
>>> print(result)
[8, 1, 2, 9, 12]

Теперь перейдем к вашей реализации, внутри первого цикла for, for s in x:, он перебирает строку.Следовательно, s принимает следующие значения:

>>> for s in x:
...     print(s)
...
8

1

2

9

1
2

Это приводит к созданию 6 целочисленных значений, которые фактически равны 5, когда строка проверяется вручную.Это основная причина, по которой вы не получаете ожидаемый результат.
Если бы строка была чем-то вроде x = "12345", она бы возвратилась, [1,2,3,4,5], чтонеправильно.

3 голосов
/ 02 июля 2019

вам нужно использовать метод split, только если есть только пробелы и цифры

x = "8 1 2 9 12"
print([int(i) for i in x.split()])

output:
[8, 1, 2, 9, 12]
1 голос
/ 02 июля 2019

Предыдущий ответ - лучшая практика для вас, но я также предлагаю другой способ использования: Regular Expression

>>>import re
>>>x = "8 1 2 9 12"
>>>list(map(int, re.findall(r'\d+', x)))
[8, 1, 2, 9, 12]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...