繁体   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