我正在尝试使用python中的re模块提取一些原始字符串。要提取的部分的结尾由重复的单词标识(重复多次)。当前的工作总是捕获重复单词的最后一个匹配项。如何修改此行为?
已从pdf中提取了一个文本文件。整个PDF都存储为一个字符串。字符串的一般格式如下:
*“ ***注释的开头:字母数字单词和字符的集合EndofsectionTopic A:单词字符串Endofsection” *
要捕获的预期字符串是:“字母数字单词和字符的集合”
在这种情况下尝试使用的解决方案是: re.compile(r“ * {3}注释的开头:(。+)\ sEndofsection”)
此尝试倾向于匹配整个字符串,而不仅仅是匹配预期的“字母数字单词和字符的集合”。
一种可行的方法是使用Endofsection进行拆分,然后仅从第一部分中提取字符串-这行得通,但是我希望使用re.compile找到更优雅的解决方案。
答案 0 :(得分:0)
正则表达式中的两个问题,
*
,因为它是\*
的元字符(.+)
,它是一个贪婪的量词,将尝试尽可能地匹配,但是由于您需要最短的匹配,因此只需将其更改为(.+?)
解决了这两个问题,为您提供了正确的预期匹配。
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