如何在Python中查找字符串中精确单词的索引

时间:2016-08-15 13:45:27

标签: python find word

word = 'laugh'    
string = 'This is laughing laugh'
index = string.find ( word )

指数是8,应该是17。 我环顾四周,但找不到答案。

5 个答案:

答案 0 :(得分:19)

您应该使用正则表达式(带字边界),因为str.find会返回第一个次出现。然后使用start对象的match属性获取起始索引。

import re

string = 'This is laughing laugh'

a = re.search(r'\b(laugh)\b', string)
print(a.start())
>> 17

您可以找到有关其工作原理的更多信息here

答案 1 :(得分:2)

这是一种没有正则表达式的方法:

word = 'laugh'    
string = 'This is laughing laugh'
# we want to find this >>> -----
# index   0123456789012345678901     
words = string.split(' ')
word_index = words.index(word)
index = sum(len(x) + 1 for i, x in enumerate(words) 
            if i < word_index) 
=> 17

将字符串拆分为单词,找到匹配单词的索引,然后将长度和空白字符汇总为前面所有单词的分隔符。

更新另一种方法是以下单行:

index = string.center(len(string) + 2, ' ').find(word.center(len(word) + 2, ' '))

此处stringword左右填充空白,以捕获字符串任意位置的完整单词。

当然,您应该使用正则表达式来提高性能和方便性。使用re模块的等效项如下:

r = re.compile(r'\b%s\b' % word, re.I)
m = r.search(string)
index = m.start()

此处\b表示字边界,请参阅re文档。正则表达式可能相当令人生畏。测试和查找正则表达式的好方法是使用regex101.com

答案 2 :(得分:2)

试试这个:

word = 'laugh'    
string = 'This is laughing laugh'.split(" ")
index = string.index(word)

这会生成一个包含所有单词的列表,然后搜索相关单词。然后我猜你可以在列表中添加所有元素的长度而不是索引,并以这种方式找到你的索引

position = 0
for i,word in enumerate(string):
    position += (1 + len(word))
    if i>=index:
        break

print position  

希望这有帮助。

答案 3 :(得分:1)

代码中的字符串不以空格分隔。如果要查找空格,则必须在要搜索的单词中包含空格。您可能会发现将字符串拆分为单词然后迭代实际上更有效率,例如:

str = "This is a laughing laugh"
strList = str.split(" ")
for sWord in strList:
    if sWord == "laugh":
        DoStuff()

在迭代时,您可以将当前单词的长度添加到索引中,当您找到单词时,可以从循环中断开。不要忘记占据空间!

答案 4 :(得分:0)

我偶然发现了这一点。我希望到现在为止您已经知道了。如果您没有,这可能会有所帮助。我和您有同样的困境,试图使用索引打印一个单词。

string = 'This is laughing laugh'
word = string.split(" ")
print(word[02])

这将打印出laughing

我希望这会有所帮助。这是我第一次在这个论坛上回答问题,请原谅我的语法。

谢谢。