Строка поиска между двумя подстроками [дубликат]

205
задан John Howard 29 July 2010 в 19:01
поделиться

7 ответов

import re

s = 'asdf=5;iwantthis123jasd'
result = re.search('asdf=5;(.*)123jasd', s)
print(result.group(1))
263
ответ дан 23 November 2019 в 04:50
поделиться

Вот один способ сделать это

_,_,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)
12
ответ дан 23 November 2019 в 04:50
поделиться
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 или использовать одну из вышеперечисленных версий ( это эквивалент групп регулярных выражений (. *) и (. *?) ).

146
ответ дан 23 November 2019 в 04:50
поделиться

Это я писал раньше как фрагмент кода в 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')
"""
1
ответ дан 23 November 2019 в 04:50
поделиться

Форматирование строк добавляет некоторую гибкость к тому, что предложил Николаус Градвол. 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)
31
ответ дан 23 November 2019 в 04:50
поделиться

Мой метод будет заключаться в том, чтобы сделать что-то вроде:

find index of start string in s => i
find index of end string in s => j

substring = substring(i+len(start) to j-1)
2
ответ дан 23 November 2019 в 04:50
поделиться
s[len(start):-len(end)]
48
ответ дан 23 November 2019 в 04:50
поделиться
Другие вопросы по тегам:

Похожие вопросы: