Python正则表达式并多次查找

时间:2012-01-14 12:23:57

标签: python regex

我的正则表达式有点问题。

我想在我的文字中找到所有“文章”的内容。 两篇文章之间可能有一个“章节”,但目前我已经通过了。

这是我的文字(没有\ n):

  

第1章Lorem ipsum dolor sit amet,diamArticle 1Maecenas ligula massa,   varius a,semper congue,euismod non,mi。 Proin porttitor第2Duis   arcu in pedeArticle 2Praesent blandit odio eu eArticle 3Pellentesque   sed dui ut augue blandit sodales。 Vestibulum ante ipsum primis in   faucibus orci luctus et ultrices posuere cubilia Curae

要获得多个匹配,我想我必须使用findall()。 但是我的小正则表达式无效:

re.findall(r"""Article\s(?P<number>\d+)(?P<content>.*)""",content,re.UNICODE)

内容参数获取我的所有文字。我认为这是因为。* 那么正则表达式如何在我的文本中多次匹配? 我不必使用findall()或我的正则表达式无效?

所以,如果有人有想法, 感谢。

Ps:我只想通过使用正则表达式进行此操作。

2 个答案:

答案 0 :(得分:2)

您需要吞下所有内容,直到找到Article\s或输入结束。这可以使用惰性量词,然后是积极的先行测试来完成:

re.findall(r"""Article\s(?P<number>\d+)(?P<content>.*?)(?=Article\s|$)""",content,re.UNICODE)

另一个解决方案是针对Article\s进行拆分,但是您需要丢弃第一个拆分组。然后,除第一个之外的每个分裂组都将服从:

^(?P<number>\d+)(?P<content>.*)$

答案 1 :(得分:0)

re.findall没问题。您可以从所有匹配中提取文本组。

您还可以看到this示例。