Создание списка всех выражений Regex - PullRequest
0 голосов
/ 04 февраля 2020

Попытка создать список всех выражений Regex ... Ищите что-нибудь с форматом name='[xxxxx]', и все с этим форматом должно быть добавлено к элементу списка. См. Код ниже.

fpath = open('Netezza_twb.txt', 'r')
lines = fpath.readlines()

temp_out_lines = [line for line in lines if '<column caption' in line]
new_var = [line for line in temp_out_lines if 'param-domain-type' not in line]

for x in range(len(out_lines)):
    test_v2 = str(new_var[x])
    new_var[x] = re.findall(r"name='\[(.*?)\]'", lambda m: m.group(1).lower(), test_v2)

Ранее я использовал re.sub (), чтобы опустить все элементы в текстовом файле, но теперь я хотел бы собрать все элементы, соответствующие указанному выше формату регулярных выражений, в список. name='[xxxxx]'

Заметьте, что re.findall () может быть не самой лучшей функцией, так как у меня нет большого опыта кодирования регулярных выражений. Однако выражение regex r"name='\[(.*?)\]'" уже доказало свою эффективность, поэтому я считаю, что проблема не в его форматировании.

1 Ответ

1 голос
/ 04 февраля 2020

Не следует смешивать синтаксис, используемый re.sub, с синтаксисом re.findall.

Использовать

results = []
fpath = open('Netezza_twb.txt', 'r')
  for line in fpath:
    if '<column caption' in line and 'param-domain-type' not in line:
      results.extend(list(map(str.lower, re.findall(r"name='\[([^][]*)]'", line))))

Примечания

  • for line in fpath: - читает файл построчно
  • if '<column caption' in line and 'param-domain-type' not in line: обрабатывает только строку, содержащую одну строку, но не другую
  • re.findall(r"name='\[([^][]*)]'", line) извлекает совпадения, захваченные в группе 1 ( содержимое между name='[ и ]')
  • list(map(str.lower,...)) преобразует совпадения в нижний регистр
  • results.extend добавляет найденные совпадения в список.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...