2016-08-15 98 views
0
word = 'laugh'  
string = 'This is laughing laugh' 
index = string.find (word) 

索引是8,应该是17. 我环顾四周,但找不到答案。如何在Python中找到一个字符串中的确切单词的索引

+0

Python新手,对我来说太复杂了! – Khan

+0

当我搜索“如何在字符串中找到一个单词”时,我在该网站上发现了194个问题。你是否说这些答案没有帮助? –

+0

8是正确答案,['find'](https://docs.python.org/2/library/string.html#string.find)返回第一个匹配子字符串的起始位置 – miraculixx

回答

0

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

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

正如你遍历您可以将当前单词的长度增加一个索引,当你发现这个词,从循环中解脱出来。不要忘记占空间!

+0

我可以发现字是在字符串中,我想知道它的索引。 – Khan

+0

我不好,你可以在迭代时添加每个单词的长度。它可能比列出的正则表达式方法效率低,但我尽可能地避免使用Python中的正则表达式 - 我将它看作是一种脚本语言,并将其视为一种易于阅读的表达式。 – XtrmJosh

7

您应该使用正则表达式(与字边界)find返回第一个的发生。然后使用match对象的start属性来获取起始索引。

import re 

string = 'This is laughing laugh' 

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

你可以找到更多关于它如何工作的信息here

+0

太棒了!你能让我知道如何在重新表达中使用变量,即我想用词而不是(笑)? – Khan

+1

@Khan就像你会用任何Python字符串。你可以连接或使用'。格式',即'词='笑'; re.search(r'\ b({})\ b'.format(word),string)' – DeepSpace

+0

这工作:re.compile(r'\ b%s \ b'%word,re.I)不确定为什么re.search(r'\ b({})\ b'.format(word),string)没有... – Khan

0

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

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

+0

downvote所有你喜欢的,但请添加评论,所以我可以改善答案。 – miraculixx

+0

r = re.compile(r'\ b%s \ b'%word,re.I)像一个魅力一样工作。您的完整解决方案也可行!非常感谢! – Khan

+0

downvote的原因是这个答案(它的两个部分)已经以非常相似的形式存在。 – XtrmJosh

0

试试这个:

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 

希望这有助于。

相关问题