#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])