문자열에서 마지막 부분 문자열 색인 찾기


349

주어진 입력 문자열에서 특정 하위 문자열이 마지막으로 나타나는 위치 (또는 색인)를 찾고 싶습니다 str.

예를 들어 입력 문자열이 str = 'hello'이고 부분 문자열이이라고 가정하면 target = 'l'3을 출력해야합니다.

어떻게해야합니까?

답변:


601

사용 .rfind():

>>> s = 'hello'
>>> s.rfind('l')
3

또한 str변수 이름으로 사용하지 않거나 내장을 음영 처리합니다 str().


7
팁에서 str변수 이름으로 사용하지 않으려면 +1 사람들이 파이썬에서 피해야 할 또 다른 변수 이름은 abc; abc네이티브 API에서 호출 된 모듈이 있습니다.
progyammer

81

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 :) .-1rindex()ValueErrorValueError

당신은 확인하지 않으려면 rfind()리턴 코드를 -1, 당신이 선호 할 수 있습니다 rindex()이해할 수있는 오류 메시지를 제공 할 것입니다. 그렇지 않으면 -1코드 내에서 예기치 않은 값 이 나오는 분을 검색 할 수 있습니다 ...


예 : 마지막 개행 문자 검색

>>> txt = '''first line
... second line
... third line'''

>>> txt.rfind('\n')
22

>>> txt.rindex('\n')
22

@JacobSchneider 님, 안녕하세요. 귀하의 의견에 따라 예를 추가했습니다. 귀하의 문제를 이해하지 못합니다. 더 많은 정보를 제공해주십시오 : 파이썬 버전, 문자열의 내용 ... Cheers
olibre

39

str.rindex방법을 사용하십시오 .

>>> 'hello'.rindex('l')
3
>>> 'hello'.index('l')
2

5

이 시도:

s = 'hello plombier pantin'
print (s.find('p'))
6
print (s.index('p'))
6
print (s.rindex('p'))
15
print (s.rfind('p'))

3

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

2

비활성 게시물을 부활 시키려고 시도하지 않았지만 아직 게시되지 않았기 때문에 ...

(이 질문을 찾기 전에 내가 한 방법입니다)

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.


1
원래의 질문에 너무 유용하지는 않지만 일반적으로 흥미롭고 교육 적이기 때문에이 답변을 찬성했습니다. 나는 파이썬에 대해 배우는 많은 것들이 이와 같다고 생각합니다.
Bill Evans at Mariposa

1

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

0

rindex()문자열에서 문자의 마지막 발생을 얻기 위해 함수를 사용할 수 있습니다

s="hellloooloo"
b='l'
print(s.rindex(b))

0

파이썬 문자열 rindex () 메소드

설명
Python 문자열 메서드 rindex ()는 하위 문자열 str이있는 마지막 인덱스를 반환하거나 해당 인덱스가 없으면 예외를 발생시켜 선택적으로 검색을 string [beg : end]로 제한합니다.

구문
다음은 rindex () 메소드의 구문입니다 -

str.rindex(str, beg=0 end=len(string))

매개 변수
str-검색 할 문자열을 지정합니다.

beg-시작 인덱스이며 기본적으로 0입니다.

len-기본적으로 종료 길이이며 문자열의 길이와 같습니다.

리턴 값
이 메소드는 발견 된 경우 마지막 인덱스를 리턴합니다. 그렇지 않으면 str을 찾을 수없는 경우 예외가 발생합니다.

예제
다음 예제에서는 rindex () 메서드 사용법을 보여줍니다.

라이브 데모

! / usr / bin / python

str1 = "this is string example....wow!!!";
str2 = "is";

print str1.rindex(str2)
print str1.index(str2)

위의 프로그램을 실행하면 다음과 같은 결과가 나타납니다.

5
2

참조 : Python String rindex () 메서드-Tutorialspoint

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.