我有一段莎士比亞戲劇的對話,基本上我想做的是:在每個演員姓名后插入一個冒號 (:)。于是對話框變成了這樣:布魯圖斯:布拉布拉布拉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
提交
取消