주어진 입력 문자열에서 특정 하위 문자열이 마지막으로 나타나는 위치 (또는 색인)를 찾고 싶습니다 str
.
예를 들어 입력 문자열이 str = 'hello'
이고 부분 문자열이이라고 가정하면 target = 'l'
3을 출력해야합니다.
어떻게해야합니까?
답변
답변
rfind()
또는 Python2 링크를 사용할 수 있습니다 .rindex()
rfind()
rindex()
>>> s = 'Hello StackOverflow Hi everybody'
>>> print( s.rfind('H') )
20
>>> print( s.rindex('H') )
20
>>> print( s.rfind('other') )
-1
>>> print( s.rindex('other') )
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: substring not found
차이점은 부분 문자열을 찾을 수 없을 때 예외를 발생 시키면서 rfind()
리턴합니다 (Python2 link 🙂 .-1
rindex()
ValueError
ValueError
당신은 확인하지 않으려면 rfind()
리턴 코드를 -1
, 당신이 선호 할 수 있습니다 rindex()
이해할 수있는 오류 메시지를 제공 할 것입니다. 그렇지 않으면 -1
코드 내에서 예기치 않은 값 이 나오는 분을 검색 할 수 있습니다 …
예 : 마지막 개행 문자 검색
>>> txt = '''first line
... second line
... third line'''
>>> txt.rfind('\n')
22
>>> txt.rindex('\n')
22
답변
str.rindex
방법을 사용하십시오 .
>>> 'hello'.rindex('l')
3
>>> 'hello'.index('l')
2
답변
이 시도:
s = 'hello plombier pantin'
print (s.find('p'))
6
print (s.index('p'))
6
print (s.rindex('p'))
15
print (s.rfind('p'))
답변
more_itertools
모든 인덱스를 찾기위한 라이브러리 제공 도구 문자 또는 모든 문자열을 .
주어진
import more_itertools as mit
s = "hello"
pred = lambda x: x == "l"
암호
캐릭터
이제 rlocate
사용 가능한 도구가 있습니다.
next(mit.rlocate(s, pred))
# 3
보완 도구는 locate
다음과 같습니다.
list(mit.locate(s, pred))[-1]
# 3
mit.last(mit.locate(s, pred))
# 3
부분 문자열
window_size
여러 항목의 선행 항목을 찾는 데 사용할 수 있는 매개 변수 도 있습니다.
s = "How much wood would a woodchuck chuck if a woodchuck could chuck wood?"
substring = "chuck"
pred = lambda *args: args == tuple(substring)
next(mit.rlocate(s, pred=pred, window_size=len(substring)))
# 59
답변
비활성 게시물을 부활 시키려고 시도하지 않았지만 아직 게시되지 않았기 때문에 …
(이 질문을 찾기 전에 내가 한 방법입니다)
s = "hello"
target = "l"
last_pos = len(s) - 1 - s[::-1].index(target)
설명 : 마지막 항목을 검색 할 때 실제로 반전 된 문자열에서 첫 번째 항목을 검색하는 것입니다. 이것을 알고, 나는 s[::-1]
(반전 된 문자열을 반환) 그 다음에서 색인을 생성 target
했습니다. 그런 다음 반전되지 않은 (예 : 원래) 문자열 len(s) - 1 - the index found
의 색인을 원하기 때문에 수행했습니다 .
그래도 조심하십시오! 경우 target
더 하나 개의 문자보다, 당신은 아마 반전 된 문자열을 찾을 수 없습니다. 이 문제를 해결하려면 last_pos = len(s) - 1 - s[::-1].index(target[::-1])
의 역 버전을 검색하는을 사용하십시오 target
.
답변
rfind 를 사용하고 싶지 않다면 트릭 /
def find_last(s, t):
last_pos = -1
while True:
pos = s.find(t, last_pos + 1)
if pos == -1:
return last_pos
else:
last_pos = pos
