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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 19.10.2023, 15:30   #1
Ципихович Эндрю
Старожил
 
Регистрация: 24.01.2011
Сообщений: 3,043
По умолчанию Извлечь данные из строки

здравствуйте, строка вида:
Код:
l = '\\Республика\\Республики\\Республику\\Республике\\ Беларусь'
как с неё получить все варианты, которые разделены между собой \\?
в данном случае:
Республика Беларусь
Республики Беларусь
Республику Беларусь
Республике Беларусь
дело в том что , могут быть варианты в начале как здесь, могут быть в конце и посредине как сделать я в курсе, как сделать покороче?
Код:
l = 'Беларус1ь \\Республика\\Республики\\Республику\\Республике\\ Беларус2ь'
if l.count('\\') != 0:
    ll = (l[l.find('\\'):l.rfind('\\') + 1])
    print(ll)
    ll_split = ll.split('\\')[1:-1]  # без первого знака и без последнего знака
    for n in ll_split:
        print(l.replace(ll, n))
но если ещё и братьям славянам помочь, у которых апострофы и их JS требует экранировать и будет дано:
Код:
l = 'я1ь \\в\’їхав\\в\’їхала\\ куди2ь'
Ципихович Эндрю вне форума Ответить с цитированием
Старый 20.10.2023, 01:11   #2
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,291
По умолчанию

Если двойные бэкслеши это не экранирование для питона, то:
Код:
texts = [
    r'Беларус1ь \\Республика\\Республики\\Республику\\Республике\\ Беларус2ь',
    r'\\Республика\\Республики\\Республику\\Республике\\ Беларусь',
    r'я1ь \\в\’їхав\\в\’їхала\\ куди2ь'
]
for l in texts:
    print(l)
    l_split = l.split(r'\\')
    for ll in l_split[1:-1]:
        print(l_split[0] + ll + l_split[-1])
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 20.10.2023, 07:58   #3
Ципихович Эндрю
Старожил
 
Регистрация: 24.01.2011
Сообщений: 3,043
По умолчанию

BDA, спасибо Вы же вручную добавили в массив к каждым данным r=как текст, но у меня же будет список конечно без r и по нему я буду идти от начала к концу и тогда как быть?
Ципихович Эндрю вне форума Ответить с цитированием
Старый 20.10.2023, 11:53   #4
Ципихович Эндрю
Старожил
 
Регистрация: 24.01.2011
Сообщений: 3,043
По умолчанию

BDA, а регуляркой такое не решить?
Ципихович Эндрю вне форума Ответить с цитированием
Старый 20.10.2023, 13:20   #5
ViktorR
Старожил
 
Регистрация: 23.10.2010
Сообщений: 2,309
По умолчанию

Цитата:
BDA, спасибо Вы же вручную добавили в массив к каждым данным r=как текст, но у меня же будет список конечно без r и по нему я буду идти от начала к концу и тогда как быть?
Добавленный символ превращает строку в "сырой" вид.
Если в строке есть обратный слэш и это не экранирующий слэш, то получить сырую строку можно функцией repr():
Код:
s = 'Hi\\nHello'
print(s)       # 'Hi\nHello'
print(repr(s)) # 'Hi\\nHello'
В последнем случае второй слэш сохраняется.
Как-то так, ...
ViktorR вне форума Ответить с цитированием
Старый 20.10.2023, 13:35   #6
Ципихович Эндрю
Старожил
 
Регистрация: 24.01.2011
Сообщений: 3,043
По умолчанию

Цитата:
Сообщение от ViktorR Посмотреть сообщение
получить сырую строку можно функцией repr()
я то спрашивал как получить НЕ сырую строку, ответ понятен, добавить:
Цитата:
Сообщение от Ципихович Эндрю Посмотреть сообщение
r=как текст
но как это сделать в цикле?
Ципихович Эндрю вне форума Ответить с цитированием
Старый 20.10.2023, 15:14   #7
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,291
По умолчанию

Цитата:
Сообщение от Ципихович Эндрю Посмотреть сообщение
но как это сделать в цикле?
Дело не в добавлении r, а что именно подается на вход программе. Если строка изначально содержит двойные бэкслеши, то не нужно позволять питону их обрабатывать (поэтому при задании строк-примеров использовал модификатор r). Но если считывать строки из файла, то проблем не будет, в строках останутся двойные бэкслеши.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 20.10.2023, 16:14   #8
Ципихович Эндрю
Старожил
 
Регистрация: 24.01.2011
Сообщений: 3,043
По умолчанию

Цитата:
Сообщение от BDA Посмотреть сообщение
Дело не в добавлении r, а что именно подается на вход программе. Если строка изначально содержит двойные бэкслеши, то не нужно позволять питону их обрабатывать (поэтому при задании строк-примеров использовал модификатор r). Но если считывать строки из файла, то проблем не будет, в строках останутся двойные бэкслеши
ясность полная, спасибо большое!
Ципихович Эндрю вне форума Ответить с цитированием
Старый 20.10.2023, 19:27   #9
ViktorR
Старожил
 
Регистрация: 23.10.2010
Сообщений: 2,309
По умолчанию

BDA
Цитата:
Дело не в добавлении r, а что именно подается на вход программе. Если строка изначально содержит двойные бэкслеши, то не нужно позволять питону их обрабатывать (поэтому при задании строк-примеров использовал модификатор r). Но если считывать строки из файла, то проблем не будет, в строках останутся двойные бэкслеши.
Вероятно это так, но вот пример:
Код:
s = 'Hi\\nHello'
l_split = s.split(r'\\')
print(l_split)   # ['Hi\\nHello']
s1 = repr(s)
l_split = s1.split(r'\\')
print(l_split)   # ["'Hi", "nHello'"]
Т.е., если за слешем символ, который со слэшем формирует служебный символ, как в примере '\n', то возможна проблема.

Иди я пока не додумал чего-то ?
Как-то так, ...
ViktorR вне форума Ответить с цитированием
Старый 02.11.2023, 11:31   #10
Ципихович Эндрю
Старожил
 
Регистрация: 24.01.2011
Сообщений: 3,043
По умолчанию

Цитата:
Сообщение от Ципихович Эндрю Посмотреть сообщение
BDA, а регуляркой такое не решить?
о то, что-то медленно этот отрезок кода делается....
не подскажите как?
Ципихович Эндрю вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Извлечь данные из запроса Vins_98 БД в Delphi 10 21.03.2016 14:13
Как извлечь данные из pcap-файла? Gangstarr C/C++ Сетевое программирование 2 22.05.2012 12:37
Извлечь данные kacagevici Microsoft Office Excel 5 23.09.2011 12:58
[Paradox 7 ] Как извлечь нужные данные? rule-z БД в Delphi 1 15.02.2011 22:40
как извлечь данные из паскаля в ворд? Elenka))) Помощь студентам 3 23.01.2010 00:23