совпадение "id" между символами подчеркивания - PullRequest
0 голосов
/ 13 июля 2020

Я новичок ie в регулярных выражениях и у меня небольшая задача. Мне нужно написать функцию, которая принимает 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\_), например:

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

но вариант, упомянутый выше, мне не нравится. У вас есть идеи получше?

Ответы [ 2 ]

0 голосов
/ 13 июля 2020

Попробуйте: (?:_|^)id(?:_|$)

Объяснение:

(?:...) - группа без захвата

_|^ - чередование, соответствие подчеркивания _ или ^ - начало слова

id - совпадение id буквально

_|$ - чередование, соответствие подчеркивания _ или $ - конец слова

Демо

Чтобы исключить id из возможных результатов, попробуйте (?:^id_|_id$|_id_)

0 голосов
/ 13 июля 2020

Вы можете сделать что-то подобное. Не забудьте разбить каждое значение в списке и отсортировать значения обратно в отдельный новый список:

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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...