Python 从标记之间的长字符串中提取子集字符串

Python 从标记之间的长字符串中提取子集字符串,python,pandas,string,list,Python,Pandas,String,List,我有下面这样的长字符串列表,我需要提取字符串的子集,并将每个长字符串中两个标记之间的字符另存为新列表。例如,我的两个字符串使用“.Power”作为标记和前面的“.”看起来像这样 我需要在“.”和“.Power”之间提取每个长列表的子集,如下所示- 我提取所有长字符串列表(即路径和文件名)的代码如下所示: import pandas as pd import glob from sys import exit pd.set_option('display.max_columns', None)

我有下面这样的长字符串列表,我需要提取字符串的子集,并将每个长字符串中两个标记之间的字符另存为新列表。例如,我的两个字符串使用“.Power”作为标记和前面的“.”看起来像这样

我需要在“.”和“.Power”之间提取每个长列表的子集,如下所示-

我提取所有长字符串列表(即路径和文件名)的代码如下所示:

import pandas as pd
import glob
from sys import exit
pd.set_option('display.max_columns', None)

path = r'\\porfiler03\\gtdshare\\VORTEX\\OBS\\ALL\\' # use your path

all_files = glob.glob(path + "/*BRASIL*.csv")

li = []

for filename in all_files:
    df = pd.read_csv(filename, index_col=None, header=0)
    li.append(filename)

frame = pd.concat(li, axis=0, ignore_index=True)

exit()
使用
re.sub

>>> import re
>>> re.sub(r'.*\.(.*)\.Power.*', r'\1', filename)
'CAETITE III'
使用
拆分

>>> filename.split('.')[-3]
'CAETITE III'
或者可能:

>>> (lambda a: a[a.index('Power')-1])(filename.split('.'))
'CAETITE III'

您可以使用正则表达式和库,请参见此处的演示:

重新导入
pat=re.compile(r“\.([\w]+)\.power”,re.I)
对于所有_文件中的文件名:
match=pat.search(文件名)
打印(匹配组(1))
#CAETITE III
#桑塔纳二世

你的意思是这样的吗?使用pandas的
提取方法

df['path'].str.extract(r'\.([\w ]+)\.Power')
             0
0  CAETITE III
1   SANTANA II

这个问题当然不需要数据帧,所以除非您将数据帧用于其他目的@Samwise在他的回答中给出了两种可能性,即更通用的python。
>>> filename.split('.')[-3]
'CAETITE III'
>>> (lambda a: a[a.index('Power')-1])(filename.split('.'))
'CAETITE III'
df['path'].str.extract(r'\.([\w ]+)\.Power')
             0
0  CAETITE III
1   SANTANA II