如何将字符从特定字符打印到具有多个字符实例的特定字符?

How to print character from a specific character to a specific character with multiple instances of the character?

我想知道是否有任何方法可以打印从特定字符开始到特定字符的文本。 (两者不一样)

条件:

我尝试了什么?:

a="ahklanfatga0-gja0-gmgaf9hatn.pdfkaufs"
indexes=[i for i,j in enumerate(a) if j=="-"]

但是我有不同的开始字符和结束字符,所以这不起作用。

例如:

a3="ahklanfatga0-gja0-gmgaf9hatn.pdfkaufs" # start char="-", end char=".pdf"

expected_output="gja0-gmgaf9hatn.pdf"

如果您想从 - 的第一次出现开始,您可以使用以下内容:

s = "ahklanfatga0-gja0-gmgaf9hatn.pdfkaufs"
#                 ^^^^^^^^^^^^^^^^^^^

preprefix, suffix, _ = s.partition(".pdf")
*_, prefix = preprefix.split("-", 1)

print(f'{prefix}{suffix}')
# Outputs gja0-gmgaf9hatn.pdf

如果你想从最后一次出现开始,你可以只改变上面的行

*_, prefix = preprefix.split("-", 1)

*_, prefix = preprefix.split("-")

此修改现在将输出gmgaf9hatn.pdf

我要扩展我的评论,因为这看起来不对。 file.readlines() returns a list,然后将其转换为字符串,但无论如何都会在 , 处拆分。如果您不需要其他行,为什么要首先阅读它们?

您确定 a3 不是 ahklanfatga0-gja0-gmgaf9hatn.pdf,kaufs,这是 运行 您的代码和 files.txt 之后的

ahklanfatga0-gja0-gmgaf9hatn.pdf
kaufs

这会更有意义。

即使files.txt只包含一行,那一行是

ahklanfatga0-gja0-gmgaf9hatn.pdfkaufs

首先将其转换为字符串没有意义。改为阅读第一行,并适当修改它。

在你的问题中 left 最后不包含 ".pdf",但在@enzo 的回答中它包含,所以我不太确定你想要什么。如果您显示文件的外观以及您期望的输出,将会有所帮助,但这是我会做的:

with open("files.txt") as f:
    for line in f:
        start = line.find("-")  # use .rfind("-") for the last index
        end = line.find(".pdf")
        if start > -1 and end > -1:
            print(line[start+1:end])

这将对所有行执行此操作。如果只是第一行,你可以这样做:

with open("files.txt") as f:
    line = next(f)
    start = line.find("-")  # use .rfind("-") for the last index
    end = line.find(".pdf")
    if start > -1 and end > -1:
        print(line[start+1:end])