word = 'laugh'
string = 'This is laughing laugh'
index = string.find ( word )
索引为8,应该是17。 我仔细找了一圈,但没有找到答案。
str.find
只会返回第一个匹配项。然后使用match
对象的start
属性获取起始索引。
import re
string = 'This is laughing laugh'
a = re.search(r'\b(laugh)\b', string)
print(a.start())
>> 17
你可以在这里找到有关它如何工作的更多信息。.format
方法,例如 word = 'laugh' ; re.search(r'\b({})\b'.format(word), string)
。 - DeepSpace试试这个:
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
以下是一种无需使用正则表达式的方法:
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。
代码中的字符串没有空格。如果你想找到空格,必须将空格包含在你要搜索的单词中。你可能会发现将字符串分割成单词然后迭代会更有效率,例如:
str = "This is a laughing laugh"
strList = str.split(" ")
for sWord in strList:
if sWord == "laugh":
DoStuff()
我偶然发现了这个问题。希望你现在已经解决了它。如果你还没有解决,也许这会有所帮助。我和你一样遇到了同样的困境,试图使用索引打印出一个单词。
string = 'This is laughing laugh'
word = string.split(" ")
print(word[02])
laughing
。
find
返回第一个匹配子字符串的起始位置。 - miraculixx