Извлечение слов, разделенных запятыми, после определенных строк, разделенных точкой с запятой, используя 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']
Вы можете попробовать мое решение, чтобы увидеть, что оно работает здесь