Новое в регулярных выражениях - неожиданные результаты для цикла for - PullRequest
0 голосов
/ 12 июня 2018

Я не уверен, является ли это проблемой в моем понимании модулей регулярных выражений или глупой ошибкой, которую я совершаю в цикле for.

У меня есть список чисел, который выглядит следующим образом:

4; 94
3; 92
1; 53

и т. Д.

Я создал шаблон регулярного выражения, соответствующий только двум последним цифрам строки:

'^.*\s([0-9]+)$'

Это работает, когда я беру каждый элементсписок 1 за один раз.

Однако, когда я пытаюсь создать цикл for

for i in xData:
    if re.findall('^.*\s([0-9]+)$', i)
       print i

В результате получается просто вся строка, а не только две последние цифры.

Я уверен, что мне здесь не хватает чего-то очень простого, но если бы кто-то мог указать мне правильное направление, это было бы здорово.Благодаря.

Ответы [ 2 ]

0 голосов
/ 12 июня 2018

Я мог бы что-то здесь упустить, но если все, что вы хотите сделать, это получить последние 2 символа, не могли бы вы использовать ниже?

for i in xData:
    print(i[-2:])
0 голосов
/ 12 июня 2018

Вы печатаете всю строку, i.Если вы хотите напечатать вывод re.findall(), сохраните результат и напечатайте этот результат :

for i in xData:
    results = re.findall('^.*\s([0-9]+)$', i)
    if results:
        print results

Я не думаю, что re.findall() является правильным методом здесь, так как ваши строки содержат только один набор цифр.Используйте re.search(), чтобы получить объект сопоставления, а если объект сопоставления не None, возьмите данные первой группы:

for i in xData:
    match = re.search('^.*\s([0-9]+)$', i)
    if match:
        print match.group(1)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...