如何将字符从特定字符打印到具有多个字符实例的特定字符?
How to print character from a specific character to a specific character with multiple instances of the character?
我想知道是否有任何方法可以打印从特定字符开始到特定字符的文本。 (两者不一样)
条件:
- 起始字符有多个实例,所以我只希望第一个实例索引为
start index
。
- 起始索引和结束索引不同,例如“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"
如果您想从 -
的第一次出现开始,您可以使用以下内容:
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])
我想知道是否有任何方法可以打印从特定字符开始到特定字符的文本。 (两者不一样)
条件:
- 起始字符有多个实例,所以我只希望第一个实例索引为
start index
。 - 起始索引和结束索引不同,例如“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"
如果您想从 -
的第一次出现开始,您可以使用以下内容:
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])