如何在不使用python中的find()的情况下在字符串中查找索引

如何在不使用python中的find()的情况下在字符串中查找索引,python,python-3.x,Python,Python 3.x,我目前正在使用find函数,发现了一个小问题 这里要着火了 如果我有一个包含单词“here”和“theres”的句子,我使用find()来查找“here”的索引,我会得到“theres” 我以为find()会像 如果这个词在那个词中: 因为它会找到单词,而不是字符串中的子字符串 是否还有其他类似的功能?我正在大量使用find(),在我用string.split()阻塞代码之前,我想知道一些替代方法,然后迭代,直到找到与索引计数器完全匹配的方法 MainLine = str('theres gon

我目前正在使用find函数,发现了一个小问题

这里要着火了

如果我有一个包含单词“here”和“theres”的句子,我使用find()来查找“here”的索引,我会得到“theres”

我以为find()会像 如果这个词在那个词中:

因为它会找到单词,而不是字符串中的子字符串

是否还有其他类似的功能?我正在大量使用find(),在我用string.split()阻塞代码之前,我想知道一些替代方法,然后迭代,直到找到与索引计数器完全匹配的方法

MainLine = str('theres gonna be a fire here')
WordtoFind = str('here')
#String_Len =  MainLine.find(WordtoFind)
split_line = MainLine.split()

indexCounter = 0
for i in range (0,len(split_line)):
     indexCounter += (len(split_line[i]) + 1)
     if WordtoFind in split_line[i]:
          #String_Len =  MainLine.find(split_line[i])
          String_Len = indexCounter 
          break

最好的方法是正则表达式。要查找“单词”,只需确保前导字符和结尾字符不是字母数字。它不使用拆分,没有公开的循环,甚至当你遇到一个奇怪的句子,如“这里有火”时,它也能工作。查找单词函数可能如下所示

import re
def find_word_start(word, string):
    pattern = "(?<![a-zA-Z0-9])"+word+"(?![a-zA-Z0-9])"
    result = re.search(pattern, string)
    return result.start()
>> find_word_start("here", "There is a fire,here")
>> 16
重新导入
def find_word_start(单词、字符串):

pattern=“(?为什么不在此处查找“使用前导空格?
str.find
查找子字符串,而不是单词。它没有单词的概念。您所描述的使用
split
然后迭代是使用find之后的第一步,即标记化和搜索。避免代码阻塞的方法是将代码与函数、类一起重复使用,etc@DanielJimenez如果“在这里”就不会可以是第一个单词,最好拆分或使用regexQuestion,如果所讨论的字符串是“这里有火,这里也有火!”,我注意到它会向我发送第一个位置。是否可以同时获取这两个位置?请尝试finditer函数,然后迭代结果,并对每个位置调用m.start()。