Измените часть слова (строки) на в другой строке, если встречается знак. Python

#python

#python

Вопрос:

Как наиболее эффективно вырезать часть слова, если появляется символ ‘ =#= ‘, а затем завершить вырезание слова, если появляется символ ‘ =#= ‘? Например:

Из большой строки

 '321@5=85@45@41=#=I-LOVE-STACK-OVER-FLOW=#=3234@41@=q#$^1=@=xx$q=@=xpa$=4319'
  

Код Python возвращает:

 'I-LOVE-STACK-OVER-FLOW'
  

Любая помощь будет оценена.

Ответ №1:

Используя split() :

 s = '321@5=85@45@41=#=I-LOVE-STACK-OVER-FLOW=#=3234@41@=q#$^1=@=xx$q=@=xpa$=4319'

st = '=#='
ed = '=#='
print((s.split(st))[1].split(ed)[0])
  

Используя regex :

 import re
s = '321@5=85@45@41=#=I-LOVE-STACK-OVER-FLOW=#=3234@41@=q#$^1=@=xx$q=@=xpa$=4319'

print(re.search('%s(.*)%s' % (st, ed), s).group(1))
  

ВЫВОД:

 I-LOVE-STACK-OVER-FLOW
  

Ответ №2:

В дополнение к ответу @DirtyBit, если вы хотите также обрабатывать случаи более 2 ‘= #=’s, вы можете разделить строку, а затем добавить все остальные элементы:

 s = '321@5=85@45@41=#=I-LOVE-STACK-OVER-FLOW=#=3234@41@=q#$^1=@=xx$q=@=xpa$=4319=#=|I-ALSO-LOVE-SO=#=3123123'
parts = s.split('=#=')
print(''.join([parts[i] for i in range(1,len(parts),2)]))
  

Вывод

 I-LOVE-STACK-OVER-FLOW|I-ALSO-LOVE-SO
  

Ответ №3:

Объяснение находится в коде.

 import re


ori_list = re.split("=#=",ori_str)
    # you can imagine your goal is to find the string wrapped between signs of "=#=" 
    # so after the split, the even number position must be the parts outsides of "=#=" 
    # and the odd number position is what you want
for i in range(len(ori_list)):
    if i%2 == 1:#odd position
       print(ori_list[i])