IT이야기

문자열에 Python의 목록에 있는 요소가 포함되어 있는지 확인하는 방법

cyworld 2022. 3. 9. 10:02
반응형

문자열에 Python의 목록에 있는 요소가 포함되어 있는지 확인하는 방법

이런 게 있는데

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

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

Python에서 이것을 하는 더 우아한 방법은 무엇일까? (for loop을 사용하지 않고)(C/C++에서 나온 것 같은) 이런 것을 생각하고 있었지만, 효과가 없었다.

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

편집: 나는 이것이 잠재적인 중복으로 표시된 아래 질문과 어떻게 다른지 설명해야 한다.

차이점은, 나는 문자열 리스트의 일부인지 확인하고 싶었지만, 다른 문제는 문자열 리스트의 문자열이 다른 문자열의 하위 문자열인지 확인하는 것이다.유사하지만, 당신이 온라인 IMHO에서 답을 찾을 때, 같은 의미론적 의미론도 문제가 되지 않는다.이 두 문제는 실제로 서로의 정반대의 문제를 해결하려고 하고 있다.그러나 두 가지 해결책은 동일하다.

제너레이터와 함께 사용any, 첫 번째 참에 단락된 회로:

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?foo그리고http://.../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)]

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

만약 누군가가 이 과제에 다시 직면하게 될 경우에 대비하여, 여기에 또 다른 해결책이 있다.

extensionsToCheck = ['.pdf', '.doc', '.xls']
url_string = 'file.doc'
res = [ele for ele in extensionsToCheck if(ele in url_string)]
print(bool(res))
> True

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

'(\.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']

참조URL: https://stackoverflow.com/questions/6531482/how-to-check-if-a-string-contains-an-element-from-a-list-in-python

반응형