Как удалить алфавиты и извлечь числа с помощью регулярных выражений в Python? - PullRequest
1 голос
/ 01 апреля 2019

Как удалить алфавиты и извлечь числа с помощью регулярных выражений в python?

import re
l=["098765432123 M","123456789012"]
s = re.findall(r"(?<!\d)\d{12}", l)
print(s)

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

123456789012

Ответы [ 4 ]

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

Если все, что вам нужно, это иметь список отфильтрованный , состоящий из элементов с чистыми цифрами, используйте filter с str.isdigit:

list(filter(str.isdigit, l))

Или, как подсказал @tobias_k, list понимание всегда твой друг:

[s for s in l if s.isdigit()]

Выход:

['123456789012']
0 голосов
/ 01 апреля 2019

Итак, чтобы было ясно, вы хотите игнорировать всю строку, если в ней есть алфавитный символ?Или вы все еще хотите извлечь номера строки с цифрами и буквенными символами в ней?

Если вы хотите найти все числа и всегда найти самое длинное число, используйте это:

regex = r"\d+"
matches = re.finditer(regex, test_str, re.MULTILINE)

\d будет искать цифры, + найдет одну или несколько изопределенные символы, и всегда найдет самую длинную последовательную строку из этих символов.

Если вы хотите найти только строки без алфавитов:

import re
regex = r"[a-zA-Z]"
test_str = ("098765432123 M", "123456789012")
for x in test_str:
    if not re.search(regex, x):
        print(x)
0 голосов
/ 01 апреля 2019

Я бы предложил использовать отрицательное прогнозное утверждение, если, как указано, вы хотите использовать только регулярное выражение.

l=["098765432123 M","123456789012"]
res=[]
for a in l:
    s = re.search(r"(?<!\d)\d{12}(?! [a-zA-Z])", a)
    if s is not None:
        res.append(s.group(0))

Результат будет:

['123456789012']
0 голосов
/ 01 апреля 2019

Чтобы сохранить только цифры, вы можете сделать re.findall('\d',s), но вы получите список:

s = re.findall('\d', "098765432123 M")
print(s)
> ['0', '9', '8', '7', '6', '5', '4', '3', '2', '1', '2', '3']
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...