繁体   English   中英

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

[英]How do I find index in string without using find() in python

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

这里会有火

如果我的句子中有“ here”和“ theres”两个词,而我使用find()查找“ here”的索引,则改为获取“ theres”

我以为find()就像那个单词中的这个单词一样:

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

是否有另一个功能可能也类似? 在使用string.split()阻塞代码之前,我正在大量使用find()来了解替代方法,然后进行迭代,直到找到与索引计数器在一侧完全匹配的代码为止。

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

最佳途径是正则表达式。 要查找“单词”,只需确保开头和结尾字符都不是字母数字。 它不使用拆分,没有暴露的循环,甚至当您遇到诸如“这里有火”的怪异句子时,它也可以工作。 find_word函数可能看起来像这样

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

我制作的正则表达式使用一种称为环顾四周的技巧,可确保单词前后的字符不是字母或数字。 https://www.regular-expressions.info/lookaround.html 术语[a-zA-Z0-9]是一个字符集,它由字符集az,AZ和0-9中的单个字符组成。 查找python re模块以查找有关正则表达式的更多信息。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM