Python 对正则表达式的负面展望?急切地只匹配碎片的第一个角括号

Python 对正则表达式的负面展望?急切地只匹配碎片的第一个角括号,python,regex,Python,Regex,我正在尝试修改一个正则表达式,我正在使用Python3.6处理我的测试数据。例如,你可以看到 str=版本)的发布而基本保持不变。它在20世纪60年代随着包含Lorem Ipsum段落的Letraset表单的发布而流行,最近随着Aldus PageMaker等桌面出版软件的发布,包括Lorem Ipsum> 您可以看到,有一组片段用尖括号隔开,我感兴趣的每个片段都以一个易于识别的字符串开头,在本例中@@某个日期和片段以尖括号结尾,如下所示 问题是,有时日期后的文本包含一个有角度的括号,并且由于

我正在尝试修改一个正则表达式,我正在使用Python3.6处理我的测试数据。例如,你可以看到

str=<@@@@2018年7月2日工业。自16世纪以来,Lorem Ipsum一直是行业标准的虚拟文本,当时一位不知名的印刷商拿起一个打印工具,将其拼凑成一本打印样本书。它不仅存活了五个世纪,而且还跃进了电子排版,基本保持不变。它在20世纪60年代随着包含Lorem Ipsum段落的Letraset表单的发布而流行,最近随着Aldus PageMaker等桌面出版软件(包括Lorem Ipsum>版本)的发布而基本保持不变。它在20世纪60年代随着包含Lorem Ipsum段落的Letraset表单的发布而流行,最近随着Aldus PageMaker等桌面出版软件的发布,包括Lorem Ipsum>

您可以看到,有一组片段用尖括号隔开,我感兴趣的每个片段都以一个易于识别的字符串开头,在本例中@@某个日期和片段以尖括号结尾,如下所示

<@@@@2018年7月2日工业。自16世纪以来,Lorem Ipsum一直是行业标准的虚拟文本,当时一位不知名的印刷商拿起一个打印工具,将其拼凑成一本打印样本书。它不仅存活了五个世纪,而且还跨越到电子排版,基本上保持不变。它在20世纪60年代随着包含Lorem Ipsum段落的Letraset表单的发布而流行,最近随着Aldus PageMaker等桌面出版软件的发布,包括Lorem Ipsum>

问题是,有时日期后的文本包含一个有角度的括号,并且由于regex是渴望的,因此只能部分匹配。有没有办法防止这种情况?我无法成功地使用负面展望

我已经尝试了以下方法:

r"<[(?!<@date) >| (?!<@date) < | ^>]+>
换句话说,匹配任何不在a后面的字符,如果它们出现在文本中,也匹配任何其他字符

 pattern = re.compile(r"<[^>]+>")
 return pattern.findall(str)

实际结果是它只部分匹配,因为正则表达式只与文本中的第一个>或<匹配,而我希望得到整个片段,包括>之后的部分,直到实际的闭合角括号和下一个片段的开头,除非是最后一个片段,否则可能没有任何遵循。

您可以匹配一个开头括号,后跟1+乘以@,然后使用非贪婪匹配。*?直到你遇到下一个
<\s*@+.*?(?=<@|$)
pattern = re.compile(r"<\s*@+.*?(?=<@|$)", re.MULTILINE)
return pattern.findall(str)
<\s*@+(?:(?!<@+).)*>