2016-06-26 6 views
0

У меня есть файл с заголовками YAML, то есть файл с началами с ---, есть ---. Что-то вроде:Извлечение заголовков YAML с использованием регулярных выражений

--- 
title: Quantes monedes de cèntim caben a un cercle? 
author: Dan Meyer 
date: 2013-08-26 
abstract: Quantes monedes de cèntim caben a un cercle? 
tags: 3-acts 
continguts: àrea, cercle, ajustament de corbes, extrapolació, funció quadràtica, representació de funcions, 
relatedto: [] 
lang: ca 
--- 


[![Penny circle](./shot.png)](http://threeacts.mrmeyer.com/pennycircle/) 

Quantes monedes de cèntim caben a un cercle? 

## Recursos ## 

1. [Proposta original d'en Dan Meyer](http://blog.mrmeyer.com/2013/makeover-penny-circle/) ([localment](./media/activitats/meyer-penny-circle/dy_dan » Blog Archive » [Makeover] Penny Circle.htm)) 
1. L'[activitat en tres actes](http://threeacts.mrmeyer.com/pennycircle/) d'en Dan Meyer ([localment](./media/activitats/meyer-penny-circle/pennycircle.zip)) 
1. [Activitat a Desmos](https://teacher.desmos.com/pennycircle) 

Я хочу использовать регулярные выражения в Python3 разделить содержание: содержание YAML и остальную часть файла. В моем примере первая часть этого

--- 
title: Quantes monedes de cèntim caben a un cercle? 
author: Dan Meyer 
date: 2013-08-26 
abstract: Quantes monedes de cèntim caben a un cercle? 
tags: 3-acts 
continguts: àrea, cercle, ajustament de corbes, extrapolació, funció quadràtica, representació de funcions, 
relatedto: [] 
lang: ca 
--- 

И второе, что:

[![Penny circle](./shot.png)](http://threeacts.mrmeyer.com/pennycircle/) 

Quantes monedes de cèntim caben a un cercle? 

## Recursos ## 

1. [Proposta original d'en Dan Meyer](http://blog.mrmeyer.com/2013/makeover-penny-circle/) ([localment](./media/activitats/meyer-penny-circle/dy_dan » Blog Archive » [Makeover] Penny Circle.htm)) 
1. L'[activitat en tres actes](http://threeacts.mrmeyer.com/pennycircle/) d'en Dan Meyer ([localment](./media/activitats/meyer-penny-circle/pennycircle.zip)) 
1. [Activitat a Desmos](https://teacher.desmos.com/pennycircle) 

Я использую этот Re: p = re.compile('---\n(.*?)\n---\n(.*?)'), но он не работает.

+0

yaml содержание можно найти ** [используя] (https://regex101.com/r/sJ1uC6/1) ** – rock321987

+0

@ rock321987: почему опустить символы перевода? –

+0

@MartijnPieters newlines ?? не понял? – rock321987

ответ

2

. не соответствует новой строки, если вы установите DOTALL flag:

p = re.compile('---\n(.*?)\n---\n(.*)', flags=re.DOTALL) 

Обратите внимание, что я сбросивший ? от второго *; вам нужно все после второго ---, а не только первого 1 символа.

Из документации:

re.S
re.DOTALL
сделать '.' специальный символ соответствует любому символу на всех, включая символ новой строки; без этого флага '.' будет соответствовать всем, кроме символа новой строки.

Однако вы можете просто разделить текст на линии ---\n; ограничить до двух расколов:

yaml, text = text.split('---\n', 2)[1:] 

Это разбивает текст в качестве префикса, секции YAML, и все остальное. Префикс игнорируется с помощью [1:].

Демо:

>>> import re 
>>> p = re.compile('---\n(.*?)\n---\n(.*)', flags=re.DOTALL) 
>>> p.search(text).groups() 
('title: Quantes monedes de cèntim caben a un cercle?\nauthor: Dan Meyer\ndate: 2013-08-26\nabstract: Quantes monedes de cèntim caben a un cercle?\ntags: 3-acts\ncontinguts: àrea, cercle, ajustament de corbes, extrapolació, funció quadràtica, representació de funcions, \nrelatedto: []\nlang: ca', "\n\n[![Penny circle](./shot.png)](http://threeacts.mrmeyer.com/pennycircle/)\n\nQuantes monedes de cèntim caben a un cercle?\n\n## Recursos ##\n\n1. [Proposta original d'en Dan Meyer](http://blog.mrmeyer.com/2013/makeover-penny-circle/) ([localment](./media/activitats/meyer-penny-circle/dy_dan » Blog Archive » [Makeover] Penny Circle.htm))\n1. L'[activitat en tres actes](http://threeacts.mrmeyer.com/pennycircle/) d'en Dan Meyer ([localment](./media/activitats/meyer-penny-circle/pennycircle.zip))\n1. [Activitat a Desmos](https://teacher.desmos.com/pennycircle)\n") 
>>> text.split('---\n', 2)[1:] 
['title: Quantes monedes de cèntim caben a un cercle?\nauthor: Dan Meyer\ndate: 2013-08-26\nabstract: Quantes monedes de cèntim caben a un cercle?\ntags: 3-acts\ncontinguts: àrea, cercle, ajustament de corbes, extrapolació, funció quadràtica, representació de funcions, \nrelatedto: []\nlang: ca\n', "\n\n[![Penny circle](./shot.png)](http://threeacts.mrmeyer.com/pennycircle/)\n\nQuantes monedes de cèntim caben a un cercle?\n\n## Recursos ##\n\n1. [Proposta original d'en Dan Meyer](http://blog.mrmeyer.com/2013/makeover-penny-circle/) ([localment](./media/activitats/meyer-penny-circle/dy_dan » Blog Archive » [Makeover] Penny Circle.htm))\n1. L'[activitat en tres actes](http://threeacts.mrmeyer.com/pennycircle/) d'en Dan Meyer ([localment](./media/activitats/meyer-penny-circle/pennycircle.zip))\n1. [Activitat a Desmos](https://teacher.desmos.com/pennycircle)\n"] 
2

Для такого простого разделителем, вы на самом деле не нужны регулярные выражения. Данный тестовый файл ...

--- 
This is the first part 
--- 
This is the second part 

... что-то так просто, как ...

>>> s = open('testfile').read() 
>>> _, part1, part2 = s.split('---\n') 
>>> print part1 
This is the first part 

>>> print part2 
This is the second part 

... должно хватить.

+0

у вас может быть много '---', как вы хотите. Так что раскол составит список .... – somenxavier

Смежные вопросы