Python 문자열에 단어가 있는지 확인합니다.
Python에서 일하고 있는데, 문자열 안에 단어가 있는지 알아보려고 합니다.
문자열에 단어가 있는지 확인하는 방법에 대한 정보를 찾았습니다..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'
맞는 말이다.단어 전체를 일치시키려면 정규 표현을 사용해야 합니다.
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
이 우아한 방법 또한 가장 빠릅니다.Hugh 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} '
문자열을 단어로 분할하여 결과 목록을 확인할 수 있습니다.
if word in string.split():
print("success")
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.')
이 작은 함수는 지정된 텍스트의 모든 검색어를 비교합니다.모든 검색어가 텍스트에 있는 경우 검색 길이를 반환합니다.False
그렇지않으면.
Unicode 문자열 검색도 지원합니다.
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
이것은 콤마 및 기타 구두점이 이미 삭제되어 있는 것을 전제로 하고 있습니다.
regex를 사용하는 것이 해결책이지만, 그 경우에는 너무 복잡합니다.
텍스트를 단어 목록으로 분할할 수 있습니다.여기에는 split(separator, num) 방식을 사용합니다.구분 기호로 구분 기호를 사용하여 문자열의 모든 단어 목록을 반환합니다.구분 기호를 지정하지 않으면 모든 공백으로 분할됩니다(선택적으로 분할 수를 num으로 제한할 수 있습니다).
list_of_words = mystring.split()
if word in list_of_words:
print('success')
쉼표 등이 있는 문자열에서는 이 방법은 사용할 수 없습니다.예를 들어 다음과 같습니다.
mystring = "One,two and three"
# will split into ["One,two", "and", "three"]
모든 콤마 등으로 분할하는 경우.separator 인수를 다음과 같이 사용합니다.
# whitespace_chars = " \t\n\r\f" - space, tab, newline, return, formfeed
list_of_words = mystring.split( \t\n\r\f,.;!?'\"()")
if word in list_of_words:
print('success')
문자열이 아닌 단어를 요구하기 때문에 프레픽스/서픽스에 구애받지 않고 대소문자를 무시하는 솔루션을 제시하겠습니다.
#!/usr/bin/env python
import re
def is_word_in_text(word, text):
"""
Check if a word is in a text.
Parameters
----------
word : str
text : str
Returns
-------
bool : True if word is in text, otherwise False.
Examples
--------
>>> is_word_in_text("Python", "python is awesome.")
True
>>> is_word_in_text("Python", "camelCase is pythonic.")
False
>>> is_word_in_text("Python", "At the end is Python")
True
"""
pattern = r'(^|[^\w]){}([^\w]|$)'.format(word)
pattern = re.compile(pattern, re.IGNORECASE)
matches = re.search(pattern, text)
return bool(matches)
if __name__ == '__main__':
import doctest
doctest.testmod()
regex' 등가 포함되어 있는 :+
이합니다.re.escape(word)
긴 문자열에서 찾아야 하는 정확한 단어를 확인하는 고급 방법:
import re
text = "This text was of edited by Rock"
#try this string also
#text = "This text was officially edited by Rock"
for m in re.finditer(r"\bof\b", text):
if m.group(0):
print("Present")
else:
print("Absent")
문자열과 단어 구두점을 분리하는 건 어때요?
w in [ws.strip(',.?!') for ws in p.split()]
필요한 경우 소문자/대소문자에 주의하십시오.
w.lower() in [ws.strip(',.?!') for ws in p.lower().split()]
그럴지도 모르지
def wcheck(word, phrase):
# Attention about punctuation and about split characters
punctuation = ',.?!'
return word.lower() in [words.strip(punctuation) for words in phrase.lower().split()]
샘플:
print(wcheck('CAr', 'I own a caR.'))
퍼포먼스를 체크하지 않았는데...
단어 앞과 뒤에 공백을 추가할 수 있습니다.
x = raw_input("Type your word: ")
if " word " in x:
print("Yes")
elif " word " not in x:
print("Nope")
이렇게 하면 "word"의 앞뒤 공간을 찾을 수 있습니다.
>>> Type your word: Swordsmith
>>> Nope
>>> Type your word: word
>>> Yes
저는 이 답변이 처음에 물어본 것에 가깝다고 생각합니다.문자열에서 하위 문자열을 찾으시겠습니까? 단, 전체 단어만 찾으시겠습니까?
단순한 regex를 사용하고 있습니다.
import re
if re.search(r"\b" + re.escape(word) + r"\b", string):
print('success')
정답 중 하나는 시험 단어의 처음과 끝에 공백을 두는 것입니다.이것은 단어의 시작이나 끝에 있거나 구두점 옆에 있는 경우 실패합니다.저의 해결책은 테스트 문자열의 구두점을 공백으로 대체하고, 처음과 끝 또는 테스트 문자열과 테스트 단어에 공백을 추가한 후 발생 횟수를 반환하는 것입니다.이것은 복잡한 정규식을 필요로 하지 않는 단순한 솔루션입니다.
def countWords(word, sentence):
testWord = ' ' + word.lower() + ' '
testSentence = ' '
for char in sentence:
if char.isalpha():
testSentence = testSentence + char.lower()
else:
testSentence = testSentence + ' '
testSentence = testSentence + ' '
return testSentence.count(testWord)
문자열 내의 단어 발생 횟수를 카운트하려면:
sentence = "A Frenchman ate an apple"
print(countWords('a', sentence))
1을 반환
sentence = "Is Oporto a 'port' in Portugal?"
print(countWords('port', sentence))
1을 반환
문자열에 단어가 있는지 테스트하려면 'if'의 함수를 사용합니다.
언급URL : https://stackoverflow.com/questions/5319922/check-if-a-word-is-in-a-string-in-python
'programing' 카테고리의 다른 글
파이썬에서 HTTP GET으로 가는 가장 빠른 방법은 무엇입니까? (0) | 2022.11.07 |
---|---|
JavaScript의 날짜로 문자열 구문 분석 (0) | 2022.11.07 |
PHP 스크립트에 대한 동시 요청 (0) | 2022.11.07 |
시제품 유전의 이점은 고전적인 것에 비해 무엇입니까? (0) | 2022.11.07 |
PDO 데이터베이스 쿼리를 디버깅하는 방법 (0) | 2022.11.07 |