我正尝试使用正则表达式来分割文本主体,基于识别文本中的节号。我用它来识别节号的开始,并捕获匹配中的所有后续文本,直到下一个节号。文本正文的一个示例可能是这样的,其中§ 1.XX-X标识该节:
§ 1.11-1 text
text
text
§ 1.15-1 text
text
text
§ 1.21-1 text
text
text
§ 1.21-2 text
text
text
§ 1.21-3 text
text
text
我目前使用的模式是(^§\s1\.\d{1,4}.+?)(?=^§\s1\.\d{1,4})
,它为每个部分创建一个匹配。但是,只有当紧跟着句号的数字是唯一的时,我才需要新的匹配。所以在这个例子中,这些数字是11,15和21;所以我希望我的配对是
Match 1:
§ 1.11-1 text
text
text
Match 2:
§ 1.15-1 text
text
text
Match 3:
§ 1.21-1 text
text
text
§ 1.21-2 text
text
text
§ 1.21-3 text
text
text
2条答案
按热度按时间yxyvkwin1#
如果不使用点匹配换行符,您可以使用捕获组
(§\s1\.\d{1,4})\b
来匹配例如§ 1.21
这样的部分。然后匹配所有不以该模式
§\s1\.\d{1,4}\b
开头的行匹配之后,可以选择使用反向引用
\1
和相同的匹配逻辑再次重复以捕获组1中的值开始的所有行。查看regex demo(注意,它启用了多行标志)
gupuwyp22#
这个正则表达式不能在regex 101上工作,但可以在Notepad++和python上工作。
正则表达式:
难点:
1.稍后要使用\1比较的捕获组:
1.匹配行但不贪婪:
但不匹配“§“后跟与第一个捕获组相同的数字:
1.该“|$”用于下一行没有“§“的最后一个匹配。
python代码: