Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/293.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 排除str()函数中的特定字符串_Python_String - Fatal编程技术网

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

Python 排除str()函数中的特定字符串,python,string,Python,String,我在编码过程中遇到的一个小问题 我想打印出一个.txt文件的名称。 例如,文件名为:verdata_florida.txt或verdata_newyork.txt 如何排除.txt和verdata,但将字符串保持在两者之间?它必须适用于任意数量的字符,但必须排除.txt和verdata 到目前为止,我已经定义了要输入的文件名() 3种方法: 使用str.split两次: >>> "verdata_florida.txt".split("_")[1].split(".")[0]

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

我想打印出一个.txt文件的名称。 例如,文件名为:verdata_florida.txt或verdata_newyork.txt 如何排除.txt和verdata,但将字符串保持在两者之间?它必须适用于任意数量的字符,但必须排除.txt和verdata

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

3种方法:

使用
str.split
两次:

>>> "verdata_florida.txt".split("_")[1].split(".")[0]
'florida'
>>> "verdata_florida.txt".replace("verdata_","").replace(".txt","")
'florida'
使用
str.partition
两次(如果格式不匹配,则不会出现异常,而且可能更快):

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

>>> import re
>>> re.sub(".*_(.*)\..*",r"\1","verdata_florida.txt")
'florida'
如果
\uuu
多次出现,则必须调整以上所有内容(我们必须保留最长或最短的字符串)

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

>>> "verdata_florida.txt".split("_")[1].split(".")[0]
'florida'
>>> "verdata_florida.txt".replace("verdata_","").replace(".txt","")
'florida'
3种方法:

使用
str.split
两次:

>>> "verdata_florida.txt".split("_")[1].split(".")[0]
'florida'
>>> "verdata_florida.txt".replace("verdata_","").replace(".txt","")
'florida'
使用
str.partition
两次(如果格式不匹配,则不会出现异常,而且可能更快):

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

>>> import re
>>> re.sub(".*_(.*)\..*",r"\1","verdata_florida.txt")
'florida'
如果
\uuu
多次出现,则必须调整以上所有内容(我们必须保留最长或最短的字符串)

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

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

您可以按点和下划线拆分字符串,如下所示:

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

您可以按点和下划线拆分字符串,如下所示:

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

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

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

假设您希望在第一个
\uuu
和最后一个
上进行分割,您可以使用切片、
索引和
rindex
函数来完成此操作。这些函数将搜索括号中第一个出现的子字符串并返回索引号。如果没有找到子字符串,它们将抛出
ValueError
。如果需要搜索,但不是
ValueError
,您也可以使用
find
rfind
,它们执行相同的操作,但如果未找到匹配项,则始终返回
-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\uu
.txt
,那么您也可以总是硬编码片段

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

假设您希望在第一个
\uuu
和最后一个
上进行分割,您可以使用切片、
索引和
rindex
函数来完成此操作。这些函数将搜索括号中第一个出现的子字符串并返回索引号。如果没有找到子字符串,它们将抛出
ValueError
。如果需要搜索,但不是
ValueError
,您也可以使用
find
rfind
,它们执行相同的操作,但如果未找到匹配项,则始终返回
-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\uu
.txt
,那么您也可以总是硬编码片段

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

请尝试
“verdata\u florida.txt”.split(“”)[1]。split(“.”[0]
为什么要调用
str()
?如果您的文件名已经是文本,则不需要。请尝试使用
verdata\u florida.txt.split(“\u”)[1]。split(“.”[0]
为什么要调用
str()
?如果你的文件名已经是文本,那就不需要了。多好的答案啊!在备选方案上做得很好!:)谢谢这个问题很基本,所以答案必须不那么基本:)tbh有更多的方法,因为这是一个非常基本的操作。例如,使用replace()。我想说OP在提问之前没有做过太多的研究。好吧,根据OP的问题的表述方式,看起来
verdata\uu
.txt
总是存在的。不管怎样,我只是说有很多方法可以做到这一点,OP可以自己轻松地解决这个问题。@Verv如果我仔细阅读的话,我就不会回答了。。。谢谢你的注意。多好的回答啊!在备选方案上做得很好!:)谢谢这个问题很基本,所以答案必须不那么基本:)tbh有更多的方法,因为这是一个非常基本的操作。例如,使用replace()。我想说OP在提问之前没有做过太多的研究。好吧,根据OP的问题的表述方式,看起来
verdata\uu
.txt
总是存在的。不管怎样,我只是说有很多方法可以做到这一点,OP可以自己轻松地解决这个问题。@Verv如果我仔细阅读的话,我就不会回答了。。。这个解决方案可能是性能最好的,因为它不创建临时字符串。这个解决方案可能是性能最好的,因为它不会创建临时字符串。我应该想到这一点。