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

3

我想知道是否有办法从一个特定的字符打印文本到另一个不同的特定字符。(两个字符不相同

条件:

  • 有多个实例的开始字符,所以我只想要第一个实例的索引作为起始索引
  • 起始索引和结束索引不同,例如“0”是起始索引,“()”是结束索引。
  • 也可能有多个开始字符的实例。

我尝试过什么?:

  • 我尝试了字符串切片。
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"

"-"字符出现了多次。您想从第一个还是最后一个开始? - Apo
“has a directory on it” 是什么意思? - martineau
我使用了 os.listdir()。 - Faraaz Kurawle
能否帮我解决一个编程问题,如果我想要最后一次出现的情况,该怎么办? - Faraaz Kurawle
@martineau,是的,你猜对了。 - Faraaz Kurawle
显示剩余5条评论
2个回答

3
如果你想从第一个出现的-开始,你可以使用以下方法:
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)

to

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

这个修改现在将输出gmgaf9hatn.pdf

哦,让我试一次。 - Faraaz Kurawle
1
非常感谢您的快速回复,它已经可以正常工作了。 - Faraaz Kurawle
能否帮我找到最后一次出现的内容? - Faraaz Kurawle
我为你更新了,Faraaz。希望你能从这个答案的力量中受益。 - enzo
你能否请提供一下你的代码解释,例如它是如何工作的,主要为什么使用了 *_ - Faraaz Kurawle

1
我将扩展我的评论,因为这看起来不正确。 file.readlines() 返回一个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])

1
使用 start = line.rfind("-") 获取最后一次出现的位置。 - blueteeth

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接