[python] Python-단어가 문자열인지 확인

Python v2로 작업 중이며 단어가 문자열인지 여부를 알 수 있는지 확인하려고합니다.

.find를 사용하여 단어가 문자열에 있는지 식별하는 방법에 대한 정보를 찾았지만 IF 문을 수행하는 방법이 있습니다. 다음과 같은 것을 갖고 싶습니다.

if string.find(word):
    print 'success'

도움을 주셔서 감사합니다.



답변

무엇이 잘못 되었습니까?

if word in mystring: 
   print 'success'


답변

if 'seek' in 'those who seek shall find':
    print('Success!')

그러나이 단어는 반드시 전체 단어 일 필요는없는 일련의 문자와 일치합니다 'word' in 'swordsmith'. 예를 들어 True입니다. 전체 단어 만 일치 시키려면 정규식을 사용해야합니다.

import re

def findWholeWord(w):
    return re.compile(r'\b({0})\b'.format(w), flags=re.IGNORECASE).search

findWholeWord('seek')('those who seek shall find')    # -> <match object>
findWholeWord('word')('swordsmith')                   # -> None


답변

전체 단어가 공백으로 구분 된 단어 목록에 있는지 확인하려면 다음을 사용하십시오.

def contains_word(s, w):
    return (' ' + w + ' ') in (' ' + s + ' ')

contains_word('the quick brown fox', 'brown')  # True
contains_word('the quick brown fox', 'row')    # False

이 우아한 방법도 가장 빠릅니다. 휴 Bothwell과 daSong의 접근 방식과 비교 :

>python -m timeit -s "def contains_word(s, w): return (' ' + w + ' ') in (' ' + s + ' ')" "contains_word('the quick brown fox', 'brown')"
1000000 loops, best of 3: 0.351 usec per loop

>python -m timeit -s "import re" -s "def contains_word(s, w): return re.compile(r'\b({0})\b'.format(w), flags=re.IGNORECASE).search(s)" "contains_word('the quick brown fox', 'brown')"
100000 loops, best of 3: 2.38 usec per loop

>python -m timeit -s "def contains_word(s, w): return s.startswith(w + ' ') or s.endswith(' ' + w) or s.find(' ' + w + ' ') != -1" "contains_word('the quick brown fox', 'brown')"
1000000 loops, best of 3: 1.13 usec per loop

편집 : Python 3.6 이상에 대한이 아이디어의 약간의 변형은 동일하게 빠릅니다.

def contains_word(s, w):
    return f' {w} ' in f' {s} '


답변

find는 검색 항목이 발견 된 색인을 나타내는 정수를 리턴합니다. 찾지 못하면 -1을 반환합니다.

haystack = 'asdf'

haystack.find('a') # result: 0
haystack.find('s') # result: 1
haystack.find('g') # result: -1

if haystack.find(needle) >= 0:
  print 'Needle found.'
else:
  print 'Needle not found.'


답변

문자열을 단어로 나누고 결과 목록을 확인할 수 있습니다.

if word in string.split():
    print 'success'


답변

이 작은 함수는 주어진 텍스트에서 모든 검색어를 비교합니다. 모든 검색어가 텍스트로 발견되면 검색 길이 등을 반환합니다 False.

유니 코드 문자열 검색도 지원합니다.

def find_words(text, search):
    """Find exact words"""
    dText   = text.split()
    dSearch = search.split()

    found_word = 0

    for text_word in dText:
        for search_word in dSearch:
            if search_word == text_word:
                found_word += 1

    if found_word == len(dSearch):
        return lenSearch
    else:
        return False

용법:

find_words('çelik güray ankara', 'güray ankara')


답변

일련의 문자를 일치시키는 것이 충분하지 않고 전체 단어를 일치시켜야하는 경우 작업을 수행하는 간단한 함수가 있습니다. 기본적으로 필요한 곳에 공백을 추가하고 문자열에서 공백을 검색합니다.

def smart_find(haystack, needle):
    if haystack.startswith(needle+" "):
        return True
    if haystack.endswith(" "+needle):
        return True
    if haystack.find(" "+needle+" ") != -1:
        return True
    return False

이것은 쉼표와 다른 문장 부호가 이미 제거되었다고 가정합니다.