word = 'laugh'
string = 'This is laughing laugh'
index = string.find ( word )
指数是8,应该是17。 我环顾四周,但找不到答案。
答案 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, ' '))
此处string
和word
左右填充空白,以捕获字符串任意位置的完整单词。
当然,您应该使用正则表达式来提高性能和方便性。使用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
。
我希望这会有所帮助。这是我第一次在这个论坛上回答问题,请原谅我的语法。
谢谢。