Python 提取文件名正则表达式的一部分



我是Python的新手,正在尝试分析一些数据。因此,我将文件夹中的所有 csv 文件导入并连接到单个数据帧中。我正在尝试提取部分文件名以用作标题,搜索后,我发现您通常会使用正则表达式。

文件名是这样的:'Varying Concentration2_20190712-145158_Base Media.csv''Varying Concentration2_20190712-145158_250 g per l.csv'等。所以我试图提取的部分是在_之后和.csv之前。

我试过:

for fname in all_data:
    res = re.findall("(?<=_)(w+).csv$", fname)
    if not res: continue
    print (res)

"(?<=[0-9]+_)(w+)"但它似乎不起作用。

所需的输出将是一个包含 'Base Media''150g per l ' 等的列表。

这是一个避免正则表达式的选项,而是使用基本split字符串函数两次:

filename = 'Varying Concentration2_20190712-145158_Base Media.csv'
parts = filename.split('_')
nameonly = parts[len(parts)-1].split('.')[0]
print(nameonly)

输出:

Base Media

如果完整的文件名也可以包含点,那么这个答案可能需要调整。

你可以做:

(?<=_)[^_]+(?=.csv$)
  • (?<=_)是与_匹配的零宽度正后视

  • [^_]+匹配一个或多个未_字符,这是我们想要的部分

  • (?=.csv$)宽度为零,向前看确保我们在比赛结束后有csv

如果您不想使用环视,则可以使用普通模式并将所需的匹配项放在第一个(也是唯一的(捕获组中(并通过match.group(1)而不是match.group()获取输出(:

_([^_]+).csv$ 

例:

In [38]: text = 'Varying Concentration2_20190712-145158_Base Media.csv'
In [39]: re.search(r'(?<=_)[^_]+(?=.csv$)', text).group()
Out[39]: 'Base Media'
In [40]: text = 'Varying Concentration2_20190712-145158_250 g per l.csv'
In [41]: re.search(r'(?<=_)[^_]+(?=.csv$)', text).group()
Out[41]: '250 g per l'

使用以下命令:

^.*_(.*).csv$

所做的只是跳过所有内容,直到_然后捕获所有内容,直到.csv

演示

您可以使用:

_([^._]+).csv

并采取第一个被俘虏的群体。

演示

解释:

_([^._]+)找到_并确保它是字符串中的最后一个,请从重复[^_]中剔除_。您还会删除一个点,以避免匹配扩展名.csv这就是为什么您重复[^._]+.它括在括号中([^._]+)使其成为稍后可以使用的捕获组。

在蟒蛇中:

>>> text = 'Varying Concentration2_20190712-145158_Base Media.csv'
>>> re.search(r'_([^._]+).csv', text).group(1)
'Base Media'

相关内容

最新更新