Member 14767732 Ответов: 3

Извлечение частей строки, предшествующих определенному фиксированному тексту в строке


Пожалуйста, помогите мне с нижеприведенным вопросом в python

sample_list = ['Ironman.mdc.googlesuite.net', 'Hulk.nba.abc.googlekey.net',
               'Thor.web.gg.hh.googlestream.net', 'Antman.googled.net',
               'Loki.media.googlesuite.net','Captain.googlekey.net']



Я бы хотел, чтобы все предшествовало "googlesuite".чистый', 'Госпогранохраны.чистый','googlestream.net и погуглил.net' в списке list1 и соответствующие префиксы в другом списке as:

result_list1 = ['Ironman.mdc', 'Hulk.nba.abc', 'Thor.web.gg.hh', 'Antman',
                'Loki.media', 'Captain']
result_list2 = ['googlesuite.net', 'googlekey.net', 'googlestream.net',
                'googled.net', 'googlesuite.net', 'googlekey.net']


Что я уже пробовал:

Попробовать это

result_list1 = [i.split('.')[0] for i in sample_list]
print(result_list1)


Не получил должного результата

3 Ответов

Рейтинг:
2

Member 14767732

Я понял , я сделал это.:

def combine(temp1, lstart, lend):
    global y
    y=""
    for w in temp1[lstart:lend-1]: 
        y=y+w+"."
    for w in temp1[lend-1:lend]:
        y=y+w

for i in edge_names:
    temp1=(i.split('.'))
    #print(temp1)
    right = len(temp1) - 2
    combine(temp1, 0, right)
    Names1.append(y)
    combine(temp1, right, len(temp1)) 
    names2.append(y)
   
print(names1)
print(names2)


для получения списка
['Hulk.nba.abc.googlekey.net']



Он разделяет все вышесказанное на :

names1=['Hulk.nba.abc]
names2=['googlekey.net']


Большое вам спасибо за вашу помощь. Цените это!


Рейтинг:
1

Richard MacCutchan

Я думаю, что единственный способ разделить эти части-использовать анализатор регулярных выражений. Взгляните на это повторные операции с регулярными выражениями — документация Python 3.7.7rc1[^] для некоторых идей.

[редактировать]
Это можно сделать с помощью split, но для этого требуется немного вычислений, как показано в приведенном ниже примере. Вы должны быть в состоянии адаптировать это к вашим собственным требованиям:

def combine(list, lstart, lend):
    for w in list[lstart:lend-1]:
        print(w, end='.')
    for w in list[lend-1:lend]:
        print(w)

list = 'Hulk.nba.abc.googlekey.net'.split('.')
right = len(list) - 2
combine(list, 0, right)
combine(list, right, len(list))

list = 'Antman.googled.net'.split('.')
right = len(list) - 2
combine(list, 0, right)
combine(list, right, len(list))

[/редактировать]


Member 14767732

Привет Ричард
Спасибо Вам за решение.Это работает блестяще, но у меня есть проблема с хранением значений.

Я хочу добавить `(w,end=".")`и `w` в список.

Например, список будет выглядеть следующим образом :

`Names1=['Hulk.nba.abc.googlekey','Antman']`

Я получаю только " ["nba.abc"]"

Я в состоянии сделать для Госпогранохраны,чистая и погуглил.чистая, но для первого. Не могли бы вы мне помочь?

Рейтинг:
0

Patrice T

Умное регулярное выражение может значительно упростить ваш код.

temp1=(i.split('.google'))

вернет список из 2-х, который выглядит так: 'Hulk.nba.abc' и 'key.net'
просто нужно добавить "google" перед вторым.

Другой способ-использовать функцию search() с регулярным выражением '(.+)\.(google.+)', в результате получается 2 группы, которые являются: 'Hulk.nba.abc' и 'googlekey.net'

Всего лишь несколько интересных ссылок, которые помогут построить и отладить регулярное выражение.
Вот ссылка на документацию по регулярным выражениям:
perlre - perldoc.perl.org[^]
Вот ссылки на инструменты, помогающие создавать регулярные выражения и отлаживать их:
.Объем тестер регулярное выражение - регулярное выражение шторм[^]
Регулярное Средство Выражения Эспрессо [^]
RegExr: Learn, Build, & Test RegEx[^]
Онлайн-тестер регулярных выражений и отладчик: PHP, PCRE, Python, Golang и JavaScript[^]
Этот пример показывает вам регулярное выражение в виде красивого графика, который действительно полезен для понимания того, что делает регулярное выражение: Debuggex: онлайн-тестер визуальных регулярных выражений. JavaScript, Python и PCRE.[^]
Этот сайт также показывает регулярное выражение в красивом графике, но не может проверить, что соответствует регулярному выражению: Regexper[^]