Python 3.x 匹配“;id";下划线之间

Python 3.x 匹配“;id";下划线之间,python-3.x,regex,pandas,Python 3.x,Regex,Pandas,我是regexp的新手,有一个小任务。我必须编写一个函数,它接受一个数据帧并返回一个列名称的过滤列表: def get_id(df:pd.DataFrame,other_id_vars:list=None)->list: 模式=重新编译(“_-id_124;u-id|id_124;”) list_id=[col for coll in df.columns if pattern.search(col)] 如果其他id变量为非无: 列表id.extend(其他id变量) 返回列表(集合(列表\标识

我是regexp的新手,有一个小任务。我必须编写一个函数,它接受一个数据帧并返回一个列名称的过滤列表:

def get_id(df:pd.DataFrame,other_id_vars:list=None)->list:
模式=重新编译(“_-id_124;u-id|id_124;”)
list_id=[col for coll in df.columns if pattern.search(col)]
如果其他id变量为非无:
列表id.extend(其他id变量)
返回列表(集合(列表\标识))
需要id模式为
(\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\/code>的单词的筛选列表,如下所示:

#from this
['subs_id', 'play_id_game', 'video', 'fluid', 'id_serv'] 
#into this
['subs_id', 'play_id_game', 'id_serv'] 

但我不喜欢上面提到的变体。你有更好的主意吗?

你可以这样做。记住将列表中的每个值拆分,并将这些值重新排序到一个单独的新列表中:

lst = ['subs_id', 'play_id_game', 'video', 'fluid', 
                                    'id_serv']

new_lst = []

for value in lst:
    formatted_val = value.split('_')
    for info in formatted_val:
        if info == 'id' or info == 'lid' or info == 'idl':
            new_lst.append(value)

print(new_lst)
试试:
(?:| ^)id(?:|$)

说明:

(?:…)
-非捕获组

| ^
-交替,匹配下划线
^
-单词的开头

id
-按字面意思匹配
id

\u124;$
-交替,匹配下划线
\u124;$
$
-单词结尾


要从可能的结果中排除
id
,请尝试
(?:^id|u id$|u id)

您的问题中没有代码,也没有正则表达式。然后把你得到的东西贴出来。#差不多有了,
^id | | | | | | | | | id$
中应该匹配的东西就行了。
['subs|id',play|id | game',video',fluid',id | service',id',id',id',id',id'.?有一个简单的答案
*(?:|id |id |.*
获取包含
id
且两边带有下划线的字符串。看起来很清楚,不需要更多的细节或清晰+1谢谢你的提问。我喜欢这个,但我们不知道OP是否希望
id
保留在数组中。@MonkeyZeus会匹配OP希望保留在数组中的条目,所以是的,OP希望保留
id
的条目。我的意思是,如果条目确实是
'id'
,那么我们不知道OP是否希望保留它。OP的问题似乎表明至少需要一个前导下划线或尾随下划线,但您的正则表达式不需要这两个下划线。@MonkeyZeus添加了另一个option@MonkeyZeus我想保留所有带有
id
的条目,以便与其他字母分开(例如,带有下划线)