我有一个正则表达式的小问题。

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

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


  第1章假单胞菌的坐骨,第1条马鞭草,
  varius a,semper congue,euismod non,mi。 Proin porttitor第2章Duis
  脚踏车第2条普罗旺斯式的书本和电子书第3条
  sed dui ut augue blandit sodales。初产VEstibulum ante ipsum
  洋紫荆和乌贼


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

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


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

因此,如果有人有想法,
谢谢。

附:我只想通过使用正则表达式来做到这一点。

最佳答案

您需要吞下所有内容,直到找到Article\s或输入结束。可以使用惰性量词,再进行正向超前测试来完成此操作:

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


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

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

10-05 20:49
查看更多