匹配";id";下划线之间



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

def get_ids(df: pd.DataFrame, other_id_vars: list=None) -> list:
pattern = re.compile('_id_|_id|id_')
list_ids = [col for col in df.columns if pattern.search(col)]
if other_id_vars is non None:
list_ids.extend(other_id_vars)
return list(set(list_ids))

需要id模式为(_id|_id_|id_)的单词筛选列表,如下所示:

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

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

尝试:(?:_|^)id(?:_|$)

说明:

(?:...)-非捕获组

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

id-匹配id字面上的

_|$-交替,匹配下划线_$-单词的末尾

演示

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

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

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)

相关内容

  • 没有找到相关文章

最新更新