簡體   English   中英

Python提取文件名regex的一部分

[英]Python extract part of file name regex

我是Python的新手,正在嘗試分析一些數據。 因此,我已經將文件夾中的所有csv文件導入並串聯到單個數據框中。 我試圖提取文件名的一部分以用作標題,搜索后,我發現您通常會使用正則表達式。

文件名如下所示: 'Varying Concentration2_20190712-145158_Base Media.csv''Varying Concentration2_20190712-145158_250 g per l.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 ”等的列表。

你可以做:

(?<=_)[^_]+(?=\.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 ,這就是為什么重復[^._]+ 它被括在方括號([^._]+) ,使其成為捕獲組,以后可以使用。

在python中:

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

這是一個避免使用正則表達式,而是兩次使用基本split字符串函數的選項:

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

輸出:

Base Media

如果完整文件名也可以包含點,則可能需要調整此答案。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM