Отбросить плавающие числа из списка строк - PullRequest
0 голосов
/ 28 мая 2020

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

string = ['20', '30', '40', '.50', '0.60', 'OA', '2A']

код:

match = []
for i in string:
     if re.match('(?<![\.\d])[0-9]+(?![\.\d])', i):
              match.append(i)
print(match)

вывод: ['20', '30', '40']

Этот код игнорирует два элемента, поскольку они не являются числовыми 'OA', '2A'

ожидаемый результат:

['20', '30', '40', 'OA', '2A']

1 Ответ

1 голос
/ 28 мая 2020

Вы можете использовать

import re

lst = ['20', '30', '40', '.50', '0.60', 'OA', '2A']

pattern = re.compile(r'-?\d*\.\d+$')

output = [item for item in lst if not pattern.match(item)]
print(output)

Это дает

['20', '30', '40', 'OA', '2A']


re.match() неявно добавляет якорь в начале, поэтому фактический шаблон будет
^-?\d*\.\d+$

Как указывает @Wiktor, Python 3.x имеет re.fullmatch(), поэтому вы можете использовать

pattern = re.compile(r'-?\d*\.\d+')
output = [item for item in lst if not pattern.fullmatch(item)]

См. демо на regex101.com .

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