Выражение регулярного выражения для подсписков - PullRequest
0 голосов
/ 22 октября 2018

У меня есть список списков, таких как:

my_list = [['aaa_house', 'aaa_car', 'aaa_table'], ['aaa_love', 'aaa_hate', 'aaa_life']]

desired_result = [['house', 'car', 'table'], ['love', 'hate', 'life']]

Я использую выражение регулярного выражения для фильтрации желаемых строк.

Я пытался:

import re
pattern = re.compile(r'\baaa[_]')
[pattern.search(i).group(1) for i in lista_fim]

Я пытался

def find_fims(sublist):
    pattern = re.compile(r'\baaa_')
    return [pattern.search(i).group(1) for i in sublist]


answer = map(find_fims, lista_with_sublists)

Я не смог получить никаких результатов, используя это.Как я могу применить функцию к подсписку списка, но сохраняя свой формат подсписка?Я просто хотел бы получить правильные имена моего подсписка.

Любая помощь?

Ответы [ 3 ]

0 голосов
/ 22 октября 2018
import re
out_list = [[re.findall(r'aaa_(\w+)', i)[0] for i in j] for j in lista_with_sublists] 

#output: 

out_list = [['house', 'car', 'table'], ['love', 'hate', 'life']]
0 голосов
/ 22 октября 2018

Ваш шаблон соответствует тому, что вы хотите отбросить, и вы используете его для извлечения (то, что вам не нужно).Итак, все, что вам нужно, это использовать re.sub:

import re

pattern = re.compile(r'\baaa_')
my_list = [['aaa_house', 'aaa_car', 'aaa_table'], ['aaa_love', 'aaa_hate', 'aaa_life']]
print([[pattern.sub('', i) for i in y] for y in my_list])

Вывод:

[['house', 'car', 'table'], ['love', 'hate', 'life']]

См. Демонстрацию Python и демонстрацию regex .

ПРИМЕЧАНИЕ Если вы хотите сопоставить aaa в начале строки , замените \b на ^.См. эту демонстрацию регулярных выражений .

Обратите внимание, что вам не нужно помещать _ внутри класса символов, _ не является специальным метасимволом регулярных выражений, и нет смысла помещать одинслово char в класс символов (эта конструкция должна быть заполнена несколькими символами или диапазонами символов).

0 голосов
/ 22 октября 2018

Пожалуйста, попробуйте следующий шаблон:

(\w)\1+_(\w+)
  • (\ w) \ 1+ соответствует повторяющейся строке, которую вы хотите отбросить, например, захваты aaa
  • (\ w +)целевое слово в группе 2

Вы должны будете использовать группу 2 вместо 1.

...