import re
s = 'asdf=5;iwantthis123jasd'
result = re.search('asdf=5;(.*)123jasd', s)
print(result.group(1))
Вот один способ сделать это
_,_,rest = s.partition(start)
result,_,_ = rest.partition(end)
print result
Другой способ - использовать регулярное выражение
import re
print re.findall(re.escape(start)+"(.*)"+re.escape(end),s)[0]
или
print re.search(re.escape(start)+"(.*)"+re.escape(end),s).group(1)
s = "123123STRINGabcabc"
def find_between( s, first, last ):
try:
start = s.index( first ) + len( first )
end = s.index( last, start )
return s[start:end]
except ValueError:
return ""
def find_between_r( s, first, last ):
try:
start = s.rindex( first ) + len( first )
end = s.rindex( last, start )
return s[start:end]
except ValueError:
return ""
print find_between( s, "123", "abc" )
print find_between_r( s, "123", "abc" )
дает:
123STRING
STRINGabc
Я подумал, что это следует отметить - в зависимости от того, какое поведение вам нужно, вы можете смешивать вызовы index
и rindex
или использовать одну из вышеперечисленных версий ( это эквивалент групп регулярных выражений (. *)
и (. *?)
).
Это я писал раньше как фрагмент кода в Daniweb :
# picking up piece of string between separators
# function using partition, like partition, but drops the separators
def between(left,right,s):
before,_,a = s.partition(left)
a,_,after = a.partition(right)
return before,a,after
s = "bla bla blaa <a>data</a> lsdjfasdjöf (important notice) 'Daniweb forum' tcha tcha tchaa"
print between('<a>','</a>',s)
print between('(',')',s)
print between("'","'",s)
""" Output:
('bla bla blaa ', 'data', " lsdjfasdj\xc3\xb6f (important notice) 'Daniweb forum' tcha tcha tchaa")
('bla bla blaa <a>data</a> lsdjfasdj\xc3\xb6f ', 'important notice', " 'Daniweb forum' tcha tcha tchaa")
('bla bla blaa <a>data</a> lsdjfasdj\xc3\xb6f (important notice) ', 'Daniweb forum', ' tcha tcha tchaa')
"""
Форматирование строк добавляет некоторую гибкость к тому, что предложил Николаус Градвол. start
и end
теперь могут быть изменены по желанию.
import re
s = 'asdf=5;iwantthis123jasd'
start = 'asdf=5;'
end = '123jasd'
result = re.search('%s(.*)%s' % (start, end), s).group(1)
print(result)
Мой метод будет заключаться в том, чтобы сделать что-то вроде:
find index of start string in s => i
find index of end string in s => j
substring = substring(i+len(start) to j-1)