我有一段莎士比亚戏剧的对话,基本上我想做的是:在每个演员姓名后插入一个冒号 (:)。于是对话框变成了这样:布鲁图斯:布拉布拉布拉CESAR:布拉布拉布拉布拉安东尼:布拉布拉布拉布拉您可以看到情况并非如此,如下所示:line_1 = 'CASSIUS Brutus, I misunderstood your feelings, and therefore kept to myself certain thoughts I might have shared. Tell me, good Brutus, can you see your face?'line_2 = 'Trumpets play. Everyone exits except BRUTUS and CASSIUS .'对话框的格式如下:演员姓名在行首全部大写 例如line_1 >>> CASSIUS即 CASSIUS 是这里的演员。但是,有些台词包含以大写格式书写的剧中演员的姓名(不是在台词的开头)。请参见第 2 行。需要的是一个正则表达式或 Python 方法来在每个演员姓名后插入一个冒号。我们通过以下两个条件知道演员的名字:1) 它在行的开头。2) 全部以大写格式书写。CASSIUS 是 line_1 中的演员(它满足两个条件)。然而,BRUTUS 和 CASSIUS 的第 2 行并非如此(它们位于行的中间),因此它们的名称后没有冒号。这是我的尝试,适用于第 2 行中不需要的词 BRUTUS 和 CASSIUS!re.sub(r'(?<=([A-Z][A-Z]\b))', ': ', line_1)re.sub(r'(?<=([A-Z][A-Z]\b))', ': ', line_1)我得到以下输出,这不好!'CASSIUS: Brutus, I misunderstood your feelings, and therefore kept to myself certain thoughts I might have shared. Tell me, good Brutus, can you see your face?''Trumpets play. Everyone exits except BRUTUS: and CASSIUS: .'
1 回答
慕桂英4014372
TA贡献1871条经验 获得超13个赞
您的方法过于复杂。"^"只需替换字符串开头 ( ) 处的两个或多个大写字母即可。这里,"\\1"是对括号中第一组的引用。
re.sub("^([A-Z]{2,})", "\\1:", line_1)# 'CASSIUS: Brutus,...'添加回答
举报
0/150
提交
取消
