我试图只捕捉标题之间始终都是大写的单词(在下面的示例中,“SONG”和“AT BAIA”)。当使用这个时,我将知道第一个标题是什么(即“歌曲”),但我不知道第二个标题是什么(即“在BAIA”)
And I lie listening awake?
SONG
You are as gold
The half-opened flowers
For your face is as fair as rain,
Yet as rain that lies clear
Casts light for a shadow.
AT BAIA
I should have thought
我成功地用以下方法捕捉到了“歌曲”下面的所有内容:
SONG\s*((.*\s.*)*)
但是当我到达一条只有大写字母的线时,我想不出如何停止
任何帮助都将不胜感激
您可以使用以下选项:
Demo
您还需要
re.MULTILINE
标志才能正常工作您可以匹配歌曲,然后在组中捕获所有不以2个大写字符开头的行
Regex demo
或者,如果行只能包含大写字母,并且也应以一个开头:
^
字符串的开头SONG\b.*
匹配歌曲、单词边界和行的其余部分(
捕获组1(?:
非捕获组\r?\n(?![A-Z][A-Z ]*$).*
如果新行不只包含大写字符,则将其与该行的其余部分匹配)*
关闭组并匹配所有行)
关闭组1Regex demoPython demo
我建议使用更简单的正则表达式
SONG(?:.|\n)*[A-Z]{3,}\s+\n
SONG
开始^{}
相关问题 更多 >
编程相关推荐