#arrays #python-3.x #string #list
Вопрос:
У меня есть список строк, как:
strings= ['stackasdf:5;iwantthis123jasdoverflow','iwantthistoo','asdf:5;python123jasd']
Теперь я хочу напечатать строки как между двумя подстроками (start=asdf:5; end=123jasd)
, так и между ними.
ожидаемый результат:
iwantthis
iwantthistoo
python
То, что я сделал, это:
import re
start = 'asdf:5;'
end = '123jasd'
for i in strings:
t=i[len(start):-len(end)]
if t:
print (t)
else:
print (i)
df:5;iwantthis123jasdo
iwantthistoo
python
Я не получаю желаемого результата, как ожидалось.
Комментарии:
1. Я голосую за то, чтобы закрыть этот вопрос, потому что неясно, о чем просит ОП, основываясь на комментариях в ответах.
Ответ №1:
Используя подход регулярных выражений, мы можем попробовать:
strings = ['stackasdf:5;iwantthis123jasdoverflow','iwantthistoo','asdf:5;python123jasd']
output = [re.findall(r'asdf:5;(.*?)123jasd', x)[0] if re.search(r'asdf:5(.*?)123jasd', x) else x for x in strings]
print(output) # ['iwantthis', 'iwantthistoo', 'python']
Комментарии:
1. Спасибо, Тим. Но мне не нужен список строк, так как я хочу добавить его в другой массив.
2. Я дал правильный и эффективный ответ, основанный на вопросе, который вы задали выше.
Ответ №2:
Вы можете просто использовать оператор simple для каждого цикла и if, чтобы распечатать правильную подстроку каждого элемента в массиве:
strings= ['stackasdf:5;iwantthis123jasdoverflow','iwantthistoo','asdf:5;python123jasd']
for word in strings:
if "asdf:5;" in word and "123jasd" in word:
ind1 = word.index("asdf:5;")
ind2 = word.index("123jasd")
print(word[ind1 7:ind2])
else:
print(word)
выход:
iwantthis
iwantthistoo
python
Комментарии:
1. Я ищу более эффективный способ сделать это, так как у меня есть список из тысяч строк.
Ответ №3:
Используйте функцию замены и разделения?
strings = ['stackasdf:5;iwantthis123jasdoverflow',
'iwantthistoo',
'asdf:5;python123jasd']
for i in strings:
c = 'n' # c may be any character that is not present in your strings
i = i.replace('asdf:5;', c).replace('123jasd', c).split(c)
print(i[0] if len(i) == 1 else i[1])
print(f'{strings = }') # to show that I am not changing the original list.
Выход:
iwantthis
iwantthistoo
python
strings = ['stackasdf:5;iwantthis123jasdoverflow', 'iwantthistoo', 'asdf:5;python123jasd']