我有一个带有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 :(得分: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"]
答案 1 :(得分: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
......应该足够了。