I'm bekerja dengan Python v2, dan I'm mencoba untuk mencari tahu jika anda dapat memberitahu jika sebuah kata dalam suatu string.
Saya telah menemukan beberapa informasi tentang mengidentifikasi jika kata dalam string - menggunakan .menemukan, tetapi ada satu cara yang harus dilakukan JIKA pernyataan. Saya ingin memiliki sesuatu seperti berikut:
if string.find(word):
print 'success'
Terima kasih untuk bantuan.
if 'seek' in 'those who seek shall find':
print('Success!')
namun perlu diingat bahwa ini pertandingan urutan karakter, belum tentu seluruh kata - misalnya, 'kata' di 'pembuat pedang'
adalah Benar. Jika anda hanya ingin mencocokkan kata-kata secara keseluruhan, anda harus menggunakan ekspresi reguler:
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
Jika anda ingin mengetahui apakah seluruh kata dalam suatu ruang yang dipisahkan dengan daftar kata-kata, hanya menggunakan:
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
Ini elegan metode ini juga tercepat. Dibandingkan dengan Hugh Bothwell's dan daSong's pendekatan:
>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
Edit: sedikit varian ini ide untuk Python 3.6+, sama-sama cepat:
def contains_word(s, w):
return f' {w} ' in f' {s} '
menemukan kembali integer yang mewakili indeks dari mana pencarian item yang ditemukan. Jika isn't ditemukan, ia mengembalikan -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.'
Kecil ini berfungsi membandingkan semua pencarian kata-kata dalam teks yang diberikan. Jika semua kata-kata pencarian yang ditemukan dalam teks, mengembalikan panjang dari pencarian, atau False
sebaliknya.
Juga mendukung unicode string pencarian.
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
penggunaan:
find_words('çelik güray ankara', 'güray ankara')
Jika sesuai urutan karakter tidak cukup dan anda perlu untuk mencocokkan seluruh kata-kata, di sini adalah sebuah fungsi sederhana yang mendapatkan pekerjaan dilakukan. Pada dasarnya menambahkan ruang-ruang mana yang diperlukan dan mencari yang dalam string:
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
Ini mengasumsikan bahwa koma dan tanda baca lainnya telah dilucuti.
Seperti yang kau minta untuk sebuah kata dan tidak untuk string, saya ingin menyajikan sebuah solusi yang tidak sensitif terhadap awalan / akhiran dan mengabaikan hal:
#!/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()
Jika kata-kata anda mungkin berisi regex karakter khusus (seperti +
), maka anda perlu kembali.melarikan diri(kata)
Lanjutan cara untuk memeriksa kata yang tepat, bahwa kita harus mencari panjang string:
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"
Menggunakan regex adalah generall solusi, tapi itu adalah rumit untuk kasus itu.
Anda hanya dapat membagi teks ke daftar kata-kata. Menggunakan split(separator, num) metode untuk itu. Ini akan menghasilkan sebuah daftar dari semua kata-kata dalam string, menggunakan separator sebagai pemisah. Jika separator ini tidak ditentukan itu terbagi pada semua spasi (opsional anda dapat membatasi jumlah membagi num).
list_of_words = mystring.split()
if word in list_of_words:
print 'success'
Ini tidak akan bekerja untuk string dengan tanda koma, dll. Misalnya:
mystring = "One,two and three"
# will split into ["One,two", "and", "three"]
Jika anda juga ingin membagi pada semua koma dll. menggunakan separator argumen seperti ini:
# 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'
Anda hanya bisa menambahkan spasi sebelum dan setelah "kata".
x = raw_input("Type your word: ")
if " word " in x:
print "Yes"
elif " word " not in x:
print "Nope"
Cara ini kelihatannya untuk ruang sebelum dan setelah "kata".
>>> Type your word: Swordsmith
>>> Nope
>>> Type your word: word
>>> Yes