首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >regex:模式无法匹配我正在寻找的

regex:模式无法匹配我正在寻找的
EN

Stack Overflow用户
提问于 2021-11-01 09:49:26
回答 3查看 108关注 0票数 1

下面的代码试图根据双字符从目录中检索文件名:

代码语言:javascript
运行
复制
import re

string = 'I:/Etrmtest/PZMALIo4/ETRM841_FX_Deals_Restructuring/FO_PRE\\abo_st_gas_dtd.csv'
pattern = r'(?<=*\\\\)*'
re.findall(pattern,string)

背后的理由是,文件的名称总是在double \之后,所以我尝试查找任何字符串,该字符串被任何以\结束的文本所取代。

从无到有,当我应用此代码时,会得到以下错误:

代码语言:javascript
运行
复制
error: nothing to repeat at position 4

我做错了什么?

编辑:,我正在寻找的具体输出是将字符串'abo_st_gas_dtd_csv'作为匹配。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2021-11-01 09:55:50

您的模式只是一个外观,它本身无法与任何东西相匹配。我将使用这种re.findall方法:

代码语言:javascript
运行
复制
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
票数 2
EN

Stack Overflow用户

发布于 2021-11-01 10:08:45

有几件事发生了:

  1. 您需要使用与模式相同的r'string'表示法来声明字符串定义;现在,您的string只有一个反斜杠,因为第一个反斜杠是转义的。
  2. ,我不确定您是否正确地使用了*。它的意思是“立即重复前一组”,而不仅仅是“任何字符串”(例如,在通常的shell模式中)。括号中的第一个*在它之前没有任何内容,这意味着正则表达式是无效的。因此,你看到了错误。我认为,您想要的是.*,即重复任何字符0或更多次。此外,在括号中不需要这样做。更正确的regexp是r'(?<=\\\\).*'

代码语言:javascript
运行
复制
import re

string = r'I:/Etrmtest/PZMALIo4/ETRM841_FX_Deals_Restructuring/FO_PRE\\abo_st_gas_dtd.csv'

pattern = r'(?<=\\\\).*'

re.findall(pattern,string)
票数 3
EN

Stack Overflow用户

发布于 2021-11-01 14:42:28

代码语言:javascript
运行
复制
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']
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69795170

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档