使用正则表达式提取带有重复结尾词的字符串的一部分

时间:2019-04-13 00:20:28

标签: python regex

我正在尝试使用python中的re模块提取一些原始字符串。要提取的部分的结尾由重复的单词标识(重复多次)。当前的工作总是捕获重复单词的最后一个匹配项。如何修改此行为?

已从pdf中提取了一个文本文件。整个PDF都存储为一个字符串。字符串的一般格式如下:

*“ ***注释的开头:字母数字单词和字符的集合EndofsectionTopic A:单词字符串Endofsection” *

要捕获的预期字符串是:“字母数字单词和字符的集合”

在这种情况下尝试使用的解决方案是: re.compile(r“ * {3}注释的开头:(。+)\ sEndofsection”)

此尝试倾向于匹配整个字符串,而不仅仅是匹配预期的“字母数字单词和字符的集合”。

一种可行的方法是使用Endofsection进行拆分,然后仅从第一部分中提取字符串-这行得通,但是我希望使用re.compile找到更优雅的解决方案。

1 个答案:

答案 0 :(得分:0)

正则表达式中的两个问题,

  • 您需要转义*,因为它是\*的元字符
  • 第二,您正在使用(.+),它是一个贪婪的量词,将尝试尽可能地匹配,但是由于您需要最短的匹配,因此只需将其更改为(.+?)

解决了这两个问题,为您提供了正确的预期匹配。

Regex Demo

Python代码,

import re

s = "***Start of notes: Collection of alphanumeric words and characters EndofsectionTopic A: string of words Endofsection"
m = re.search(r'\*{3}Start of notes:(.+?)\sEndofsection', s)
if m:
 print(m.group(1))

打印

 Collection of alphanumeric words and characters