簡體   English   中英

在沒有正則表達式的情況下檢查整個單詞是否在python的文本文件中

[英]Checking if a whole word is in a text file in python without regex

我試圖找到一個單詞是否在文件中,而不是如果它是部分單詞的一部分。 例如,如果word = 'tes'和'test'在單詞列表中,我希望它返回False。 我已經找到了可以通過正則表達式進行操作的地方,但是由於我所學的內容還沒有涵蓋這一部分,所以我想看看如果沒有它,我是否可以做到這一點。

這是我到目前為止的內容:

WORDLIST_FILENAME = "words.txt"

def isValidWord(word, hand, wordList):
    letters = {}
    for i in word:
    letters[i] = letters.get(i, 0) + 1

    if word.upper() in open(wordList).read():
        for i in letters:
            if i in hand:
                if hand[i] >= letters[i]:
                    continue
                else:
                    return False
            else:
                return False
        return True
    else:
        return False


word = 'tes'
hand = {'t': 3, 'a': 1, 's': 1, 'i': 1, 'n': 1, 'g': 1}

print(isValidWord(word, hand, 'words.txt'))

即使'tes'實際上不在word.txt中,它也會返回True。 我知道為什么,因為我正在檢查該字符串是否在文件周期內,但是我不知道如何解決。

您可能想檢查in關鍵字,因為它看起來像您想要的。

這是一個簡單的示例:

>>> word = "some"
>>> sentence = "This is a sentence with some words."
>>> word in sentence
True

由於不希望它與部分單詞匹配,因此可以刪除所有非字母字符,然后split字符串:

>>> sentence = ''.join(char for char in sentence if char.isalpha() or char.isspace()).split()
>>> "words" in sentence
True
>>> "word" in sentence
False

坦白說,我只是為此使用正則表達式。

只是提出另一個解決方案,

if line.startswith('test ') or line.endswith(' test\n') or ' test ' in line:
    # ...

可以說這很笨拙,但是它確實避免了使用正則表達式或僅查找一個單詞就將整行分割的問題。 盡管我沒有做任何計時,但在分析整條線之前檢查線的開始和結束可能會縮短幾個周期。

前提是這些行是規則間隔的(單詞之間有一個空格,沒有制表符等,沒有標點符號)。 如果您的要求有所不同,可以通過按空格和可選標點符號的順序對行進行歸一化來解決。

您可以使用string.find方法。 它返回找到的字符串的索引,否則返回-1。 例如:

str  = "This is a Test method". 
a = str.find("test")
if a>=0:
    return True
else:
    return False

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM