在str()函数中排除特定的字符串

2024-05-07 13:54:35 发布

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

我在编写代码时遇到的一个小问题。你知道吗

我想打印出一个.txt文件的名字。 例如,文件名为:verdata_佛罗里达.txt,或verdata_纽约.txt 如何排除.txt和verdata,但将字符串保持在两者之间?它必须适用于任意数量的字符,但必须排除.txt和verdata。你知道吗

到目前为止,我已经定义了要输入的文件名()

print("Average TAM at", str(filename[8:**????**]), "is higher than ")

Tags: 文件字符串代码txt数量定义文件名名字
3条回答

假设您希望它在第一个_和最后一个.上拆分,那么可以使用切片和indexrindex函数来完成此操作。这些函数将搜索括号中第一个出现的子字符串并返回索引号。如果没有找到子字符串,它们将抛出一个ValueError。如果需要搜索,而不是ValueError,那么也可以使用findrfind,这两种方法做相同的事情,但如果没有找到匹配项,则总是返回-1。你知道吗

s = 'verdata_new_hampshire.txt'
s_trunc = s[s.index('_') + 1: s.rindex('.')]  # or s[s.find('_') + 1: s.rfind('.')]

print(s_trunc)  # new_hampshire

当然,如果总是要排除verdata_.txt,那么也可以总是硬编码片段。你知道吗

print(s[8:-4])  # new_hampshire

三种方法:

使用str.split两次:

>>> "verdata_florida.txt".split("_")[1].split(".")[0]
'florida'

使用str.partition两次(如果格式不匹配,则不会出现异常,而且可能更快):

>>> "verdata_florida.txt".partition("_")[2].partition(".")[0]
'florida'

使用re,仅保留中心部分:

>>> import re
>>> re.sub(".*_(.*)\..*",r"\1","verdata_florida.txt")
'florida'

如果_.出现多次(我们必须保持最长或最短的字符串),则必须调整上述所有内容

编辑:不过,在您的情况下,前缀和后缀似乎是固定的。在这种情况下,只需使用str.replace两次:

>>> "verdata_florida.txt".replace("verdata_","").replace(".txt","")
'florida'

您可以在字符串上利用str.split()。例如:

s = 'verdata_newyork.txt'

s.split('verdata_')
# ['', 'florida.txt']

s.split('verdata_')[1]
# 'florida.txt'

s.split('verdata_')[1].split('.txt')
['florida', '']

s.split('verdata_')[1].split('.txt')[0]
# 'florida'

相关问题 更多 >