使用python查找字符串的第二个索引,该字符串应该是行的开始

2024-06-01 12:40:58 发布

您现在位置:Python中文网/ 问答频道 /正文

我在找一个字符串的第二次出现的索引。字符串存在于文本文件中。我可以使用python中的find()函数获得第二个发生索引

这里,我需要使用2个因子来找到字符串的索引。 1) 字符串应该是行的开始。 2) 这应该是整个档案中第二次出现。 3) 字符串可能出现在段落之间,但我需要忽略这些,只找到以新行开始的字符串的索引

也尝试了startwith()函数。但我能够在一个查询中匹配字符串并检索结果,但无法找到解决此问题的逻辑

这是文本文件内容。假设“vitae”是字符串,它出现在段落中,我可以得到每个“vitae”字符串的索引,但不能得到它作为从新行开始的第二个实例

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Morbi sollicitudin tortor et velit venenatis molestie. Morbi non nibh magna, quis tempor metus. 
Vivamus vehicula velit sit amet neque posuere id hendrerit sem venenatis. Nam vitae felis sem. Mauris ultricies congue mi, eu ornare massa convallis nec. 
vitae Donec volutpat molestie velit, scelerisque porttitor dui suscipit vel. Etiam feugiat feugiat nisl, vitae commodo ligula tristique nec. Fusce bibendum fermentum rutrum.

这个代码会给我第一次和第二次发生的索引

i = st.find("vitae")
b = st.find("vitae", i+1)
print "this s 1st occurance",i
print "this s 2nd occurance",b

也尝试过这个代码,但是没有成功

def find2(strng, ch, start):
    index = start
    while index < len(strng):
        print "inside while loop"
        if strng[index] == ch:
            print "inside if loop"
            return index
        index += 1
    return -1

提前谢谢!感谢您的帮助


Tags: 函数字符串indexfind段落print文本文件amet
1条回答
网友
1楼 · 发布于 2024-06-01 12:40:58

你只需要搜索"\n"

def find2(string, substring, start=0):
    return string.find(
        "\n" + substring,
        string.find("\n" + substring, start) + len(substring) + 1
    ) + 1

是一种选择。但是我推荐一个直接找到第n次发生的版本:

def findnth(string, nth, substring, start=0):
    splitted = string[start:].split("\n" + substring, nth)
    if len(splitted) != nth + 1:
        raise ValueError("substring not found")
    return len(string) - len(splitted[-1]) - len(substring)

相关问题 更多 >