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

时间:2017-09-12 14:25:38

标签: python string

我在编码过程中遇到的一个小问题。

我打算打印出.txt文件的名称。 例如,该文件名为:verdata_florida.txt或verdata_newyork.txt 如何排除.txt和verdata_,但保持字符串?它必须适用于任意数量的字符,但必须排除.txt和verdata_。

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

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

4 个答案:

答案 0 :(得分:2)

3种方式:

两次使用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'

答案 1 :(得分:2)

假设您希望它在第一个_和最后一个.上拆分,您可以使用切片以及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

答案 2 :(得分:1)

您可以按字母和下划线分割:

string filename = "verdata_prague.txt";
string name = filename.split("."); //verdata_prague
name = name[0].split("_")[1]; //prague

或通过替换功能:

string filename = "verdata_prague.txt";
string name = filename.replace(".txt",""); //verdata_prague
name = name[0].replace("verdata_","")[1]; //prague

答案 3 :(得分:1)

您可以在字符串上使用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'