Возврат фиксированной строки (числа) чисел в строке? - PullRequest
1 голос
/ 04 апреля 2020

В этих данных:

[‘23 2312 dfr tr 133’,
 ‘2344 fdeed’,
 ‘der3212fr342 96’]

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


2 numbers in a row:
[‘23’,’’,’96’]

3 numbers in a row:
[‘133’,’’,’342’]

4 numbers in a row:
[‘2312’,’2344’,’3212’]

Спасибо

1 Ответ

3 голосов
/ 04 апреля 2020

Одним из способов может быть использование re.findall для извлечения смежных цифр из строк и сохранения тех, которые имеют длину n:

l = ['23 2312 dfr tr 133',
     '2344 fdeed',
     'der3212fr342 96']

import re

def length_n_digits(l,n):
    return [s for i in l for s in 
            re.findall(rf'(?<!\d)\d{{{n}}}(?!\d)', i) or ['']]

Обратите внимание, что двойные скобки '{{}}' просто для того, чтобы избежать внутренних скобок, и интерполяция не происходит. (?<!\d) и (?!\d) предназначены для обхода и обеспечения соответствия, только когда последовательность цифр n не окружена другими цифрами.


length_n_digits(l, 2)
# ['23', '', '96']

length_n_digits(l, 3)
# ['133', '', '342']

length_n_digits(l, 4)
# ['2312', '2344', '3212']
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...