Regex 在python中第n次出现的字符与正则表达式之间匹配字符串

Regex 在python中第n次出现的字符与正则表达式之间匹配字符串,regex,python-3.x,Regex,Python 3.x,我正在处理tar.gz文件中的文件,该文件包含txt文件,并试图提取相关TarInfo对象的文件名,该对象的成员。name属性如下所示: aclImdb/test/neg/1026_2.txt aclImdb/test/neg/1027_5.txt ... aclImdb/test/neg/1030_4.txt 我编写了以下代码,用于打印字符串test/neg/1268_2 regex = '\/((?:[^/]*/).*?)\.' with tarfile.open("C:\\Users\\

我正在处理tar.gz文件中的文件,该文件包含txt文件,并试图提取相关
TarInfo
对象的文件名,该对象的
成员。name
属性如下所示:

aclImdb/test/neg/1026_2.txt
aclImdb/test/neg/1027_5.txt
...
aclImdb/test/neg/1030_4.txt
我编写了以下代码,用于打印字符串
test/neg/1268_2

regex = '\/((?:[^/]*/).*?)\.'
with tarfile.open("C:\\Users\\Orestis\\Desktop\\aclImdb_v1.tar.gz") as archive:
    for member in archive.getmembers():
         if member.isreg():
         m = re.findall(regex, member.name)
         print(m)

如何修改正则表达式以仅提取文件名的
1268_2
部分?实际上,我想在第三次出现
“/”
之后和第一次出现
之前提取字符串。您可以硬编码以下内容:

.*?\/.*?\/.*?\/(.*?)\.
更优雅的是这样的:

(.*?\/){3}(.*?)\.

您可以简单地更改3以适应您的模式。(请注意,您想要的群组是2美元)

您可以硬编码:

.*?\/.*?\/.*?\/(.*?)\.
更优雅的是这样的:

(.*?\/){3}(.*?)\.

您可以简单地更改3以适应您的模式。(请注意,您需要的组是$2)

\d+\d+(?=\.\w+$)
\w+(?=\.\w+$)
就可以了。您甚至可以在不使用正则表达式的情况下,通过执行类似于
stru list=in.split('/')[3]
然后
out='..join(stru list)
(这将在第三个“/”之后抓取所有内容)。
\d+\ud+(?=.\w$)
\w+(?=\.\w+$)
可以。您甚至可以在不使用正则表达式的情况下执行类似于
stru list=in.split('/')[3]
的操作,然后执行
out='.join(stru list)
(这将捕获第三个“/”之后的所有内容)。