在字符串中查找单词时结果不正确

时间:2016-04-11 19:26:43

标签: python python-2.7

我有一段代码在字符串中找到一个单词,并显示它出现的次数,但如果我输入一个字母,例如' a'它会发现所有出现的' a'在字符串中,而不仅仅是' a'在它自己的。我目前的代码是:

for For in SentenceSplit:
     #looks for the users word in the sentence
     if re.search(Word, str(For)):
        #if found adds one to the counter
        counter=counter+1

4 个答案:

答案 0 :(得分:1)

如果我理解你想要做的正确,

ah a banana a fruit

应该分成

ah, a, banana, a, fruit

如果您正在寻找a,那么ahbananafruit应该不匹配,而a的两次出现应该。因此,您想要的结果是2

如果你正在寻找固定的字符串(例如userWord = "a"),你可以简单地找到它

counter = userSentenceSplit.count(userWord)

例如

"ah a banana a fruit".split().count("a")

2。正如您所期望的那样,count会计算列表中某些元素的出现次数。 (在字符串中,它会计算子字符串的出现次数,这可能会使您感到困惑。)

如果您的搜索模式更复杂并且您确实需要regexp,则可以将re.search替换为re.match,{{3}}仅匹配搜索字符串的开头。

如果您的搜索模式包含结尾(例如,您不希望aah匹配),请务必在$中结束模式。

>>> re.match("a", "a")
<_sre.SRE_Match object; span=(0, 1), match='a'>
>>> re.match("a", "a longer string")
<_sre.SRE_Match object; span=(0, 1), match='a'>
>>> re.match("a$", "a")
<_sre.SRE_Match object; span=(0, 1), match='a'>
>>> re.match("a$", "a longer string") # No match
None

答案 1 :(得分:0)

您可以使用split()将字符串拆分为单词,==进行比较。

s = "a rat and a cat"
w = 'a'
count = 0
for useFor in s.split(' '):
    if w == useFor:
        count += 1
print count

输出:2

如果您喜欢匹配字符串的正则表达式,请参阅C Panda的答案。

答案 2 :(得分:0)

f=open('filename','r').read()##file with the sentences
f1=f.split('\n')
l=[]
for i in range (len(f1)):
    a=f1[i].split(' ')
    for wd in a:
        l.append(wd)
c=0
word=raw_input('enter the word:')
for el in l:
    if word==l[el]:
       c+=1
if c==0:
    print 'word not found'
else:
    print 'word found, no of times=',c

希望这会有所帮助

答案 3 :(得分:-1)

reg = r"\b{}\b".format(word)
matches = re.findall(reg, sentence)
len(matches)