Печатать только те части строки, которые соответствуют регулярному выражению Pandas - PullRequest
1 голос
/ 05 марта 2020

У меня 400 файлов, содержащих несколько строк. Я хочу найти указанную c строку и извлечь / распечатать только ее часть.

Я хочу достичь строки:

Full seesion name: T27I5E8_S1_N005_V004

И только для печати:

S1_V004

Я пробовал с:

for filename in os.listdir(data_directory): 
     with open(data_directory + "/" + filename) as file:
        for line in file:
            if re.search(r'([S][\d])|([V][\d]{3})', line):
                    print(line)

, но он выводит всю строку. Я также пытался:

  subjID = re.compile(r'([S][\d])|([V][\d]{3})')

for filename in os.listdir(data_directory): 
     with open(data_directory + "/" + filename) as file:
        for line in file:
            print(subjID.findall(line))

но вывод выглядит так:

  []
[]
[]
[]
[('S1', ''), ('', 'V094')]
[]
[]
[]
[]
[]
[]
[]
[('S1', ''), ('', 'V094')]
[]
[]
[]
[]
[]
[]
[]

1 Ответ

1 голос
/ 05 марта 2020

Вы можете использовать

for filename in os.listdir(data_directory): 
  with open(data_directory + "/" + filename, 'r') as file:
    for line in file:
      m = re.findall(r'[SV]\d+', line)
      if len(m):
        print("_".join(m))

См. Python demo и regex demo . При re.findall все совпадения найдены, и, если они были, в результате получается _ -конкатенированная строка, составленная из совпавших текстов.

Детали шаблона

  • [SV] - S или V
  • \d+ - 1+ цифр
...