首页 > 解决方案 > 从剧本中解析场景

问题描述

嗨,我正在尝试从剧本中解析出场景。我最近发布了关于对话的帖子,而正则表达式专业人士@Wiktor Stribiżew 帮助了我。我能够使用这种模式几乎完美地捕捉场景,但我正在寻找更多帮助。

所以你会看到我已经捕获了两个组。第 1 组用于 EXT 和 INT,表示新场景,第 2 组用于场景内容。但是,我希望将 BURNETT HOUSE - DAY 添加到第 1 组。基本上将上下文添加到场景中。这几乎可以做到,([A-Z]+\b.)但我不知道如何合并它,而且它很草率并且捕捉到了一些单个大写字母。

7    INT. COLONY HOTEL - STAIRWELL - NIGHT                       7
     Lowrey and Burnett clip on their shields and unholster
     their guns. The posing is over. This is business.


A8   INT. COLONY HOTEL - SUITE 202 - NIGHT                       A8
     On the table are two briefcases. Each opened. One
     containing cocaine. The other, cash. A pistol next
     to each.
       

在此处输入图像描述

标签: pythonregexparsing

解决方案


您可以使用

\b((?:INT|EXT)\..*\S)[^\S\n]+[a-zA-Z]*\d+\n(?s:(.+?)(?=\b(?:EXT|INT)\.|\Z))

请参阅正则表达式演示

详情

  • \b- 单词边界
  • ((?:INT|EXT)\..*\S)- 第 1 组:INTEXT,然后是 a .,然后是除换行符之外的任何零个或多个字符,尽可能少,然后是非空白字符
  • [^\S\n]+- 除换行符以外的一个或多个空格
  • [a-zA-Z]*- 零个或多个 ASCII 字母
  • \d+- 一位或多位数字
  • \n- 换行符
  • (?s:.-匹配任何字符 的 innline 修饰符组的开始:
    • (.+?)- 第 2 组:尽可能多的一个或多个字符
    • (?=\b(?:EXT|INT)\.|\Z)- 到最左边EXTINT后跟一个点,或直到字符串的末尾
  • )- 小组结束。

推荐阅读