[python] 파이썬에서 문자열이 목록의 요소를 포함하는지 확인하는 방법

나는 이와 같은 것을 가지고있다 :

extensionsToCheck = ['.pdf', '.doc', '.xls']

for extension in extensionsToCheck:
    if extension in url_string:
        print(url_string)

(for 루프를 사용하지 않고) 파이썬에서이를 수행하는보다 우아한 방법이 무엇인지 궁금합니다. 나는 C / C ++에서와 같은 이와 같은 것을 생각하고 있었지만 작동하지 않았다.

if ('.pdf' or '.doc' or '.xls') in url_string:
    print(url_string)

편집 : 나는 이것이 잠재적 중복으로 표시되는 아래 질문과 어떻게 다른지 설명해야합니다 (따라서 닫히지 않습니다).

차이점은 문자열이 문자열 목록의 일부인지 확인하고 다른 질문은 문자열 목록의 문자열이 다른 문자열의 하위 문자열인지 확인하는 것입니다. 온라인 IMHO에 대한 답변을 찾을 때 비슷하지만 의미가 중요하지 않습니다. 이 두 질문은 실제로 서로 반대되는 문제를 해결하려고합니다. 둘 다에 대한 해결책은 동일합니다.



답변

와 함께 발전기를 사용 any하면 첫 번째 True에서 단락됩니다.

if any(ext in url_string for ext in extensionsToCheck):
    print(url_string)

편집 : 이 답변이 OP에 의해 수락 된 것으로 보입니다. 내 솔루션은 그의 특정 문제에 대한 “충분히 좋은”솔루션 일 수 있지만 목록의 문자열이 다른 문자열에 있는지 확인하는 좋은 일반적인 방법이지만 이것이이 솔루션의 모든 것임을 명심하십시오. 예를 들어 문자열의 끝에서 문자열이 발견되는 위치는 중요하지 않습니다 . URL의 경우와 마찬가지로 이것이 중요한 경우 @Wladimir Palant의 답변을 살펴 보거나 오 탐지 위험이 있습니다.


답변

extensionsToCheck = ('.pdf', '.doc', '.xls')

'test.doc'.endswith(extensionsToCheck)   # returns True

'test.jpg'.endswith(extensionsToCheck)   # returns False


답변

당신이 처리 할 수있는이 방법 – 제대로 URL 구문 분석하는 것이 좋습니다 http://.../file.doc?foohttp://.../foo.doc/file.exe제대로을.

from urlparse import urlparse
import os
path = urlparse(url_string).path
ext = os.path.splitext(path)[1]
if ext in extensionsToCheck:
  print(url_string)


답변

단일 회선 솔루션을 원할 경우 목록 이해를 사용하십시오. 다음 코드는 확장명이 .doc, .pdf 및 .xls 인 경우 url_string을 포함하는 목록을 반환하거나 확장명이 포함되지 않은 경우 빈 목록을 반환합니다.

print [url_string for extension in extensionsToCheck if(extension in url_string)]

참고 : 이것은 포함 여부를 확인하기위한 것이며 확장과 일치하는 정확한 단어를 추출하려고 할 때 유용하지 않습니다.


답변

이 정규식과 일치하는지 확인하십시오.

'(\.pdf$|\.doc$|\.xls$)'

참고 : 확장명이 URL의 끝에 있지 않으면 $문자를 제거 하되 약간 약화 시킵니다.


답변

이것은 @psun이 제공하는 목록 이해 답변의 변형입니다.

출력 값을 전환하면 실제로 목록 이해에서 일치하는 패턴을 추출 할 수 있습니다 ( any()@ Lauritz-v-Thaulow 의 방법으로 는 불가능 )

extensionsToCheck = ['.pdf', '.doc', '.xls']
url_string = 'http://.../foo.doc'

print [extension for extension in extensionsToCheck if(extension in url_string)]

[ ‘.doc’]`

일치하는 패턴을 알고 나면 추가 정보를 수집하려는 경우 정규식을 추가로 삽입 할 수 있습니다 (허용 된 패턴 목록이 너무 길어서 단일 정규식 패턴에 쓸 수없는 경우에 유용 할 수 있음)

print [re.search(r'(\w+)'+extension, url_string).group(0) for extension in extensionsToCheck if(extension in url_string)]

['foo.doc']


답변