Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Скриптовые языки программирования > Python
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 07.12.2023, 14:32   #1
Ципихович Эндрю
Старожил
 
Регистрация: 24.01.2011
Сообщений: 3,126
По умолчанию Удалить ненужные строки

здравствуйте, есть переменная в которой имеется многострочный текст, примерно с таким текстом:
'[ящик для хранения]',
'[ящик для]',
они НЕ обязательно отсортированы по алфавиту
и есть список слов, они являются первыми словами искомого, этими словами могут быть и цифры и числа:
Код:
a=["1", "2", "3"]
так вот так как в этом списке нет данных "ящик" как удалить эти строки регуляркой? спасибо
Ципихович Эндрю вне форума Ответить с цитированием
Старый 07.12.2023, 16:26   #2
Ципихович Эндрю
Старожил
 
Регистрация: 24.01.2011
Сообщений: 3,126
По умолчанию

Код:
import re
a=["1", "2", "3", "ящик"]
data = \
"'[ящик для хранения]',\n\
'[ящик для]',"
for l in a:
    data = re.sub(r'ХЗ', data, '', re.M)  # re.M=re.MULTILINE
print(data)
вместо ХЗ, какой патерн нужно поставить?
Ципихович Эндрю вне форума Ответить с цитированием
Старый 07.12.2023, 20:05   #3
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,351
По умолчанию

А зачем регулярка?
Код:
a = ["1", "2", "3", "ящик"]
data = \
"'[ящик для хранения]',\n\
'[ящик для]',\n\
'[кошка]'"

b = set(a)
res = []
for line in data.split('\n'):
    i = line.find(' ')
    word = line[2:i if i != -1 else -2]
    if word in b:
        res.append(line)
data = '\n'.join(res)
print(data)
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA на форуме Ответить с цитированием
Старый 07.12.2023, 20:35   #4
Ципихович Эндрю
Старожил
 
Регистрация: 24.01.2011
Сообщений: 3,126
По умолчанию

Цитата:
Сообщение от BDA Посмотреть сообщение
А зачем регулярка?
слаб я в регулярках, потому как нужна мне регулярка НЕ часто, хотя как сказать))
Код:
import re
a = ["1", "2", "3", "ящик"]
data = "'[ящик для хранения]',\n'[2 ящика для хранения]',\n'[для ящик]',"
print(re.sub(rf'(?ms)(?<=\[)({"|".join(a)}) ', '', data))
но ответ то должен быть НЕ
'[для хранения]',
'[ящика для хранения]',
'[для ящик]',
А только
'[для ящик]',
то есть удалять всю строку, как подправить?
Ципихович Эндрю вне форума Ответить с цитированием
Старый 07.12.2023, 20:55   #5
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,351
По умолчанию

Код:
print(re.sub(rf"('\[(?:{'|'.join(a)})(?: .+?)?\]',\n?)", '', data))
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA на форуме Ответить с цитированием
Старый 07.12.2023, 20:56   #6
Ципихович Эндрю
Старожил
 
Регистрация: 24.01.2011
Сообщений: 3,126
По умолчанию

то, что нужно, спасибо
Ципихович Эндрю вне форума Ответить с цитированием
Старый 09.12.2023, 14:06   #7
Ципихович Эндрю
Старожил
 
Регистрация: 24.01.2011
Сообщений: 3,126
По умолчанию

глаз замылился так, что лучше спросить)), код:
Код:
import re
a = ["1", "2", "3", "ящик"]
data = "'[ящик для хранения]',\n'[2 ящика для хранения]',\n'[для ящик]',"
res = re.sub(rf"('\[(?:{'|'.join(a)})(?: .+?)?\]',\n?)", '', data)
print(res)
выведет:
'[для ящик]',
а как сделать, чтобы он вывел:
'[ящик для хранения]',
'[2 ящика для хранения]',
то есть наоборот, чтобы скрипт удалил те варианты, первые слова которых нет в списке а? спасибо
Ципихович Эндрю вне форума Ответить с цитированием
Старый 09.12.2023, 17:16   #8
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,351
По умолчанию

Код:
print(re.sub(rf"('\[(?!({'|'.join(a)})( |\]))(.+?)\]',\n?)", '', data))
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA на форуме Ответить с цитированием
Старый 09.12.2023, 17:57   #9
Ципихович Эндрю
Старожил
 
Регистрация: 24.01.2011
Сообщений: 3,126
По умолчанию

спасибо, то что нужно
Ципихович Эндрю вне форума Ответить с цитированием
Старый 10.12.2023, 09:10   #10
Ципихович Эндрю
Старожил
 
Регистрация: 24.01.2011
Сообщений: 3,126
По умолчанию

подскажите, а то, что заложено в регулярку, я говорю о '|'.join(a)
Код:
a = ["1", "2", "3", "ящик"]
res = '|'.join(a)
print(res)
результат будет: 1|2|3|ящик
где регулярка возьмет первый и последний знак '|'?
насколько я знаю в регулярку нужно подать
Код:
res = '|' + '|'.join(a) + '|'
|1|2|3|ящик|
Ципихович Эндрю вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Удалить неиспользуемые/ненужные приложения kzld Мобильные ОС (Android, iOS, Windows Phone) 2 06.03.2018 18:19
удалить ненужные байты mr_xxx C# (си шарп) 4 11.10.2017 12:42
Как быстрее всего удалить из строчки ненужные символы Krasi Общие вопросы .NET 1 26.11.2015 18:03
Удалить все ненужные символы SweetOpium Microsoft Office Excel 8 03.03.2015 17:37
как из строки ТМемо удалить ненужные символы MixanMM Общие вопросы Delphi 3 10.06.2009 13:49