使用正则表达式提取YAML头

2024-09-24 06:24:23 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个带有YAML头的文件,即以---开头的文件,have---。比如:

---
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(.*?)'),但它不起作用。你知道吗


Tags: comhttpdeenundancirclemeyer
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

…应该够了。你知道吗

.不匹配换行符,除非设置^{} flag

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

请注意,我从第二个*中删除了?;您需要第二个 -之后的所有内容,而不仅仅是第一个1字符。你知道吗

根据文件:

re.S
re.DOTALL
Make the '.' special character match any character at all, including a newline; without this flag, '.' will match anything except a newline.

但是,您可以只拆分 -\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"]

相关问题 更多 >