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