从文件名中检测模式,然后从右侧提取 5 个字符

我在 A 目录中有数千个文件,我想做的是:

  1. 检测文件名中带有“ABC”的任何文件。

  2. 检测到后,再提取右侧的 5 个字符。

例子:

34291.daveabc2712144.txt

eidddvabc24156.mp3

beonabcsimple.csv

输出:


abc27121

abc24156

abcsimpl

感谢问候


红颜莎娜
浏览 120回答 4
4回答

森林海

你可以使用正则表达式做这样的事情:import retxts = ["34291.daveabc2712144.txt",        "eidddvabc24156.mp3",        "beonabcsimple.csv",        "fABCgfdge.txt"]for i in txts:    x = re.findall("abc.{5}", i)    #if you need to be case insensitive you can do this    #x = re.findall("abc.{5}", i, re.IGNORECASE)    if x:        print(x)

慕森王

以下是如何使用该glob模块。假设所有的abc都是小写的:from glob import globfor file in glob('*abc*'): # For every file that has 'abc' in it    i = file.find('abc') # Find the index of the 'abc'    print(file[i:i+8]) # Print out the file name 5 characters from the end of 'abc', or 8 from the start这样做的好处是:glob('*abc*')这样我们就不会首先列出所有'abc'文件,只列出名称中包含的文件。

互换的青春

>>> s = '34291.daveabc2712144.txt'>>> s[(start := s.index('abc')): start + 8] 'abc27121'假设海象运算符'abc'可以找到并且需要 Python 3.8+。在我看来,这样一个简单的任务不需要正则表达式。

白衣染霜花

您可以使用正则表达式:abc.{5}在Python:import restrings = ["34291.daveabc2712144.txt", "eidddvabc24156.mp3", "beonabcsimple.csv"]rx = re.compile(r'abc.{5}')names = [m.group(0) for string in strings for m in [rx.search(string)] if m]print(names)请参阅regex101.com 上的演示。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python