word = 'laugh'
string = 'This is laughing laugh'
index = string.find (word)
索引是8,应该是17. 我环顾四周,但找不到答案。如何在Python中找到一个字符串中的确切单词的索引
word = 'laugh'
string = 'This is laughing laugh'
index = string.find (word)
索引是8,应该是17. 我环顾四周,但找不到答案。如何在Python中找到一个字符串中的确切单词的索引
代码中的字符串不能用空格分隔。如果您想查找空间,则必须在要搜索的单词中包含空格。您可能会发现它实际上会更有效为您分割字符串成词,然后迭代,如:
str = "This is a laughing laugh"
strList = str.split(" ")
for sWord in strList:
if sWord == "laugh":
DoStuff()
正如你遍历您可以将当前单词的长度增加一个索引,当你发现这个词,从循环中解脱出来。不要忘记占空间!
您应该使用正则表达式(与字边界)find
返回第一个的发生。然后使用match
对象的start
属性来获取起始索引。
import re
string = 'This is laughing laugh'
a = re.search(r'\b(laugh)\b', string)
print(a.start())
>> 17
你可以找到更多关于它如何工作的信息here。
这里是没有正则表达式的一种方法:
word = 'laugh'
string = 'This is laughing laugh'
words = string.split(' ')
word_index = words.index(word)
index = sum(len(x) + 1 for i, x in enumerate(words)
if i < word_index)
=> 17
这分裂串入的话,找到匹配词的索引,然后总结了长度和空白字符的所有单词前一个分隔它。
您当然应该使用正则表达式来提高性能和方便性。使用re
模块的等效如下:
r = re.compile(r'\b%s\b' % word, re.I)
m = r.search(string)
index = m.start()
这里\b
装置字边界,请参阅re
文档。正则表达式可能非常令人畏惧。测试并找到正则表达式的一个好方法是使用regex101.com
downvote所有你喜欢的,但请添加评论,所以我可以改善答案。 – miraculixx
r = re.compile(r'\ b%s \ b'%word,re.I)像一个魅力一样工作。您的完整解决方案也可行!非常感谢! – Khan
downvote的原因是这个答案(它的两个部分)已经以非常相似的形式存在。 – XtrmJosh
试试这个:
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
希望这有助于。
Python新手,对我来说太复杂了! – Khan
当我搜索“如何在字符串中找到一个单词”时,我在该网站上发现了194个问题。你是否说这些答案没有帮助? –
8是正确答案,['find'](https://docs.python.org/2/library/string.html#string.find)返回第一个匹配子字符串的起始位置 – miraculixx