python - 从剧本中解析场景
问题描述
嗨,我正在尝试从剧本中解析出场景。我最近发布了关于对话的帖子,而正则表达式专业人士@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.
解决方案
您可以使用
\b((?:INT|EXT)\..*\S)[^\S\n]+[a-zA-Z]*\d+\n(?s:(.+?)(?=\b(?:EXT|INT)\.|\Z))
请参阅正则表达式演示。
详情:
\b
- 单词边界((?:INT|EXT)\..*\S)
- 第 1 组:INT
或EXT
,然后是 a.
,然后是除换行符之外的任何零个或多个字符,尽可能少,然后是非空白字符[^\S\n]+
- 除换行符以外的一个或多个空格[a-zA-Z]*
- 零个或多个 ASCII 字母\d+
- 一位或多位数字\n
- 换行符(?s:
.
-匹配任何字符 的 innline 修饰符组的开始:(.+?)
- 第 2 组:尽可能多的一个或多个字符(?=\b(?:EXT|INT)\.|\Z)
- 到最左边EXT
或INT
后跟一个点,或直到字符串的末尾
)
- 小组结束。
推荐阅读
- javascript - 未找到 Primereact 导入
- php - 如何强制 woocommerce 中的访问者登录,然后才能访问我的商店?
- javascript - 如何在同一幻灯片中添加另一个带有图像的 div?
- windows-services - 如何使用不同的帐户将 Apache ActiveMQ Artemis 作为 Windows 服务运行
- javafx - SceneBuilder 与 java Netbeans 的集成
- java - 将 String 转换为 Double 进行计算会导致我遇到十进制数的问题,如何四舍五入?
- android - 类路径中的运行时 JAR 文件应该具有相同的版本
- swift - 带有协议的 NSKeyedUnarchiver EXC_BAD_INSTRUCTION
- firebase - Flutter 上的 firebase_ml_vision 中的人脸计数功能
- spring-boot - Kotlin SpringBoot 和 JPA - 关系 OneToMany-ManyToOne 的问题