Python 正则表达式和多次查找

1 投票
2 回答
511 浏览
提问于 2025-04-17 10:14

我遇到了一个小问题,关于正则表达式(regex)。

我想在我的文本中找到所有的“文章”内容。文章之间可能会有一个“章节”,但目前我先不考虑这个。

这是我的文本(没有换行符):

第1章Lorem ipsum dolor sit amet,diam文章1Maecenas ligula massa, varius a, semper congue, euismod non, mi. Proin porttitor第2章Duis arcu in pede文章2Praesent blandit odio eu e文章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)

这里的content参数获取了我所有的文本。我猜是因为有.*这个部分。所以我的正则表达式怎么才能在文本中多次匹配呢?我是不是必须使用findall(),或者我的正则表达式本身就不对?

如果有人有主意,感谢!

附:我想只用正则表达式来解决这个问题,以便进步。

2 个回答

0

re.findall 是可以的。你可以从所有匹配的结果中提取出一组文本。

你还可以看看这个例子。

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>.*)$

撰写回答