下面的代码试图根据双字符从目录中检索文件名:
import re
string = 'I:/Etrmtest/PZMALIo4/ETRM841_FX_Deals_Restructuring/FO_PRE\\abo_st_gas_dtd.csv'
pattern = r'(?<=*\\\\)*'
re.findall(pattern,string)背后的理由是,文件的名称总是在double \之后,所以我尝试查找任何字符串,该字符串被任何以\结束的文本所取代。
从无到有,当我应用此代码时,会得到以下错误:
error: nothing to repeat at position 4我做错了什么?
编辑:,我正在寻找的具体输出是将字符串'abo_st_gas_dtd_csv'作为匹配。
发布于 2021-11-01 09:55:50
您的模式只是一个外观,它本身无法与任何东西相匹配。我将使用这种re.findall方法:
string = 'I:/Etrmtest/PZMALIo4/ETRM841_FX_Deals_Restructuring/FO_PRE\\abo_st_gas_dtd.csv'
filename = re.findall(r'\\([^.]+\.\w+)$', string)[0]
print(filename) # abo_st_gas_dtd.csv发布于 2021-11-01 10:08:45
有几件事发生了:
r'string'表示法来声明字符串定义;现在,您的string只有一个反斜杠,因为第一个反斜杠是转义的。*。它的意思是“立即重复前一组”,而不仅仅是“任何字符串”(例如,在通常的shell模式中)。括号中的第一个*在它之前没有任何内容,这意味着正则表达式是无效的。因此,你看到了错误。我认为,您想要的是.*,即重复任何字符0或更多次。此外,在括号中不需要这样做。更正确的regexp是r'(?<=\\\\).*'。
import re
string = r'I:/Etrmtest/PZMALIo4/ETRM841_FX_Deals_Restructuring/FO_PRE\\abo_st_gas_dtd.csv'
pattern = r'(?<=\\\\).*'
re.findall(pattern,string)发布于 2021-11-01 14:42:28
files = 'I:E\\trm.csvest/PZMALIo4\ETRM841_FX_.csvDeals_Restructuring/FO_PRE\\abo_st_gas_dtd.csv'
counter = -1
my_files = []
for f in files:
counter += 1
if ord(f) == 92:#'\'
temp = files[counter+1:len(files)]
temp_file = ""
for f1 in temp:
temp_file += f1
# [0-len(temp_file)] => if [char after . to num index of type file]== csv
if f1 == '.' and temp[len(temp_file):len(temp_file)+3] == "csv":
my_files.append(temp_file + "csv")
break
print(my_files)#['trm.csv', 'ETRM841_FX_.csv', 'abo_st_gas_dtd.csv']https://stackoverflow.com/questions/69795170
复制相似问题