Извлечение слов, разделенных запятыми, после определенных строк, разделенных точкой с запятой, используя python

У меня длинный файл

Jet pack(human, metal)
thin wire, sheet; fat tube,rod
thin girl;
fat boy;
We like to read
They like to write
End

Я хотел бы извлечь все слова после слова "тонкий" и "жирный", разделенные запятой. Эти слова тоже могут быть одни. В любом случае, даже если на одной строке присутствуют как тонкие, так и толстые, они будут разделены точкой с запятой. Мой массив будет содержать:

wire, sheet, tube,rod,girl,boy

Мне нужен массив этих слов, которые я затем буду использовать для расширения аргументов функции. Поскольку это смесь, как мы можем использовать полосу для; а потом опять использовать полоску для,?

ура

1 ответ

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

Это регулярное выражение, которое я использую:

(?:thin|fat)(.*?)(?=thin|fat|\n)

Он будет соответствовать чему-либо после thin / fat и до того, как найдет другой thin / fat или символ новой строки.

x = """
Jet pack(human, metal)
thin wire, sheet; fat tube,rod
thin girl;
fat boy;
We like to read
They like to write
End
"""
import re

y = [j.strip() for i in re.findall(r'(?:thin|fat)(.*?)(?=thin|fat|\n)', x) for j in re.split(r'[;,]', i) if j.strip()]
print(y)

Выход:

['wire', 'sheet', 'tube', 'rod', 'girl', 'boy']

Вы упомянули, что у вас были трудности с чтением из файла, вот рабочий пример чтения из файла:

test.txt

Jet pack(human, metal)
thin wire, sheet; fat tube,rod
thin girl;
fat boy;
We like to read
They like to write
End

Код

import re

with open('test.txt') as f:
  y = [j.strip() for i in re.findall(r'(?:thin|fat)(.*?)(?=thin|fat|\n)', f.read()) for j in re.split(r'[;,]', i) if j.strip()]
  print(y)

Выход:

['wire', 'sheet', 'tube', 'rod', 'girl', 'boy']

Вы можете попробовать мое решение, чтобы увидеть, что оно работает здесь

Другие вопросы по тегам