我正在解析许多重复的简单模式的文本。该文本是在脚本中的一个播放的格式,如:正则表达式匹配所有字符直到下一个匹配
SAMPSON
I mean, an we be in choler, we'll draw.
GREGORY
Ay, while you live, draw your neck out o' the collar.
我目前使用的模式([A-Z0-9\s]+)\s*\:?\s*[\r\n](.+)[\r\n]{2}
,工作正常(下文解释),除了在人物的讲话中有换行符。当发生这种情况时,角色的名字被成功捕获,但只有语音的第一行被捕获。
打开单行模式(包括.
中的换行符)只是创建一个巨大的匹配。
如何在(.+)
找到下一个字符名称并结束匹配时停止?
我正在遍历每个匹配(JavaScript),所以名称必须可用于下一场比赛。
理想情况下,我将能够匹配所有字符,直到整个模式重复。
模式解释说:
第一组相匹配的角色的名字(允许大写字母,数字和空格),(后面有个冒号和空格可选)。
第二组(角色的演讲)从新行开始并捕获任何字符(除了问题,换行符和后面的字符)。
模式在空行后结束(并重新开始)。
您需要明确地定义如何一个决定下一个名字开始之前,你可以令状e正则表达式来匹配它。它本身是否有冒号的单个单词?会导致任何不正确的匹配? – mellamokb 2012-04-29 03:25:09
@mellamokb我忘了包括模式的最后一部分,它寻找一个空行。比赛以角色的名字开始(全部大写在自己的行上),并以演讲结束后的空白行结束。 – Nathan 2012-04-29 03:33:45
我相信你在示例文本中缺少冒号,正则表达式不适用于它。 – 2012-04-29 03:39:36