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

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

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

Восстановить пароль
Повторная активизация e-mail

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

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

этот код:
Код:
import re
a = ["1", "2", "3", "ящик", "18"]
r = '|' + '|'.join(a) + '|'
print(r)
data = "1 18 2 3 ящик"
res = re.sub(r, '', data)
print(len(res))
print('|' + res + '|')
демонстрирует, что строго по очереди идут замены - одно за другим
насколько это быстрей чем заменять циклом? спасибо
Ципихович Эндрю вне форума Ответить с цитированием
Старый 10.12.2023, 10:48   #12
Ципихович Эндрю
Старожил
 
Регистрация: 24.01.2011
Сообщений: 3,043
По умолчанию

а вот наскрёб ошибку
missing ), unterminated subpattern at position
отсутствует), незавершенный подшаблон в позиции
это она в связи с чем? список
а = ["1", "2", "3", "ящик", "18"]
не как здесь, он у меня конечно-же большой, в этом причина?
Ципихович Эндрю вне форума Ответить с цитированием
Старый 10.12.2023, 12:58   #13
Ципихович Эндрю
Старожил
 
Регистрация: 24.01.2011
Сообщений: 3,043
По умолчанию

Цитата:
Сообщение от Ципихович Эндрю Посмотреть сообщение
он у меня конечно-же большой
429778 шт. и предполагается, что будет увеличиваться
хотя нет аналогичный код хоть и за 10 минут, но справился с удалением по аналогии
было до удаления
991387 шт.
стало после удаления 608115 шт.

Последний раз редактировалось Ципихович Эндрю; 10.12.2023 в 13:01.
Ципихович Эндрю вне форума Ответить с цитированием
Старый 10.12.2023, 15:48   #14
Ципихович Эндрю
Старожил
 
Регистрация: 24.01.2011
Сообщений: 3,043
По умолчанию

Цитата:
Сообщение от Ципихович Эндрю Посмотреть сообщение
429778 шт. и предполагается, что будет увеличиваться
хотя нет аналогичный код хоть и за 10 минут, но справился с удалением по аналогии
было до удаления
991387 шт.
стало после удаления 608115 шт.
ошибался было 48834 шт. - НА порядок меньше
Ципихович Эндрю вне форума Ответить с цитированием
Старый 11.12.2023, 05:52   #15
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,291
По умолчанию

Цитата:
Сообщение от Ципихович Эндрю Посмотреть сообщение
где регулярка возьмет первый и последний знак '|'?
Они не нужны, точнее, будут означать пустые строки. Например, "|1|":
Цитата:
1st Alternative — always finds a zero-length match
2nd Alternative 1
1 matches the character 1 with index 4910 (3116 or 618) literally (case sensitive)
3rd Alternative — always finds a zero-length match
Цитата:
Сообщение от Ципихович Эндрю Посмотреть сообщение
демонстрирует, что строго по очереди идут замены - одно за другим
Ну да, слева направо проверяются. Так что для удаления 18, нужно разместить 18 в списке a до 1.
Цитата:
Сообщение от Ципихович Эндрю Посмотреть сообщение
чем заменять циклом?
Как именно циклом? Можно написать двумя способами, а потом на небольшом объеме данных сравнить время, используя timeit.
Цитата:
Сообщение от Ципихович Эндрю Посмотреть сообщение
missing ), unterminated subpattern at position
Может быть в список забрели управляющие символы, например, скобка?
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 11.12.2023, 08:10   #16
Ципихович Эндрю
Старожил
 
Регистрация: 24.01.2011
Сообщений: 3,043
По умолчанию

Цитата:
Сообщение от BDA Посмотреть сообщение
Может быть в список забрели управляющие символы, например, скобка?
да там были знаки ?,(,), тогда так:
Код:
import re
a = ["1", "2", "3", "?", "(", ")", "ящик", "18"]
a_str = '|'.join(a)
a_str = a_str.replace("?", "\?")
a_str = a_str.replace("(", "\(")
a_str = a_str.replace(")", "\)")
data = "1 18 2 3 ящик"
res = re.sub(a_str, '', data)
print(len(res))
print('|' + res + '|')
осталось только выяснить какой длины список можно вскармливать регулярке?
Ципихович Эндрю вне форума Ответить с цитированием
Старый 16.12.2023, 10:00   #17
Ципихович Эндрю
Старожил
 
Регистрация: 24.01.2011
Сообщений: 3,043
По умолчанию

Цитата:
Сообщение от Ципихович Эндрю Посмотреть сообщение
спасибо, то что нужно
в постах 6 и 9
Код:
import re
a = ["1", "2", "3", "ящик"]
data = "'[ящик для хранения]',\n'[2 ящика для хранения]',\n'[для ящик]',"
print(a)
print("11111111111111111111111111111111111111111111111111111111111111111111111111")
print(data)
print("2 удаляет всю строку если первое слово её имеется в списке 222222222222222")
print(re.sub(rf"('\[(?:{'|'.join(a)})(?: .+?)?\]',\n?)", '', data)) # 5 пост
print("3 удалет всю строку если первое её слово НЕ имеется в списке 3333333333333")
print(re.sub(rf"('\[(?!({'|'.join(a)})( |\]))(.+?)\]',\n?)", '', data)) # 8 пост
а как сделать удалят всю строку если первое её слово НЕ имеется в списке, если:
data = "'[ящик, для хранения]',\n'[2, ящика для хранения]',\n'[для, ящик]',"
??? то есть после первого слова добавится запятая, спасибо
Ципихович Эндрю вне форума Ответить с цитированием
Старый 16.12.2023, 13:33   #18
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,291
По умолчанию

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

BDA - СПАСИБО!
Ципихович Эндрю вне форума Ответить с цитированием
Старый 16.12.2023, 15:36   #20
Ципихович Эндрю
Старожил
 
Регистрация: 24.01.2011
Сообщений: 3,043
По умолчанию

BDA, поторопился, так нужно ведь, чтобы было без разницы, стоит запятая или нет:
Код:
a = ["1", "2", "3", "ящик"]
data = "'[ящик для хранения]',\n'[для ящика]',\n'[ящик, находящийся]',"
слово в русском языке ведь после себя справа может иметь и пробел и запятую, должно выдать:
'[для ящика]',
так как "для" отсутствует в списке, а две остальные строки должно удалить
Ципихович Эндрю вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 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