我有莎士比亚戏剧的对话,我基本上想做的是:
在每个演员名称后插入一个冒号(:)。这样对话框就变成了这样:
BRUTUS:Bla blah blah
CESAR:Bla blah blah
ANTONY:Bla blah blah
您可以看到情况并非如此,如下所示:
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方法,以便在每个actor名称后插入冒号。我们通过以下两个条件知道演员的名字:
1)在行的开头。
2)全部以大写格式编写。
CASSIUS是第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"
是对括号中第一组的引用。
re.sub("^([A-Z]{2,})", "\\1:", line_1)
# 'CASSIUS: Brutus,...'