Регулярные выражения Python вернуть true если слово не начинается на цифру, и в слове встречается больше 5 цифр подряд
Регулярные выражения Python вернуть false если слово не начинается на цифру, и в слове встречается больше 5 цифр подряд
примеры слов: 19181920flupandemic covid19 blackdeath coronavirus italy covid1920 pandemic sarscov2 2009flupandemic 2020coronaviruspandemicinitaly
Из списка должны остаться: covid19 blackdeath coronavirus italy pandemic sarscov2
Нашла (^\d\w.*$) Но как применить не знаю
text = ['19181920flupandemic','covid19','blackdeath','coronavirus','italy','covid1920','pandemic','sarscov2','2009flupandemic','2020coronaviruspandemicinitaly']
text2 = []
for i in range(len(text)):
if len(str(text[i])) <= 15:#слово короче 15 символов
if str(text[i]) and #здесь хочу вставить условия регулярных выражений
text2.append(str(text[i]))
Ответы (3 шт):
Попробуйте так:
import re
text = ['19181920flupandemic','covid19','blackdeath','coronavirus','italy','covid1920','pandemic','sarscov2','2009flupandemic','2020coronaviruspandemicinitaly']
r = re.findall(r'^\D+\d{0,5}', text[1]) #Вместо text[1] подставляете любую строку
print(r)
Мой вариант (за образец взят предыдущий ответ от Alioshca Z)
text = ['19181920flupandemic','covid19','blackdeath','coronavirus','italy','covid1920','pandemic','sarscov2','2009flupandemic','2020coronaviruspandemicinitaly']
text2 = []
for items in text:
if (re.findall(r'^\D', items)) and not (re.findall(r'\d{6,}', items)):
text2.append(items)
print(text2)
Результат: ['covid19', 'blackdeath', 'coronavirus', 'italy', 'covid1920', 'pandemic', 'sarscov2']
Примечание: в представленном вами входящем списке нет строки, которая отвечает обоим условиям из заголовка (т.е. не начинается с цифры и содержит больше 5 цифр подряд). В вашем примере выходных данных цифр как раз должно быть от 0 до 5.
Вторая часть регулярного выражения может выглядеть как-то так – not (re.findall(r'\d{6,}', items)
т.е. не 6 и более цифр подряд.
Предложенный ранее вариант пропускает строки, где число цифр подряд больше 6 (тестовый пример 'sarscov23456789').
r = re.findall(r'^\D+\d{0,5}', "sarscov23456789")
print(r)
вывод ['sarscov23456']
Примите это во внимание, если к вам в список попадают не только указанные ранее строки.
Вроде вот такое должно подойти:
^(?!(?!\d).*\d{5})
Если надо всё-таки true, то внешние отрицание удалить.