我正在解析許多重複的簡單模式的文本。該文本是在腳本中的一個播放的格式,如:正則表達式匹配所有字符直到下一個匹配
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