为了账号安全,请及时绑定邮箱和手机立即绑定

Python 正则表达式 - 正后视量词替代方案

Python 正则表达式 - 正后视量词替代方案

狐的传说 2022-11-29 17:12:12
我有一段莎士比亚戏剧的对话,基本上我想做的是:在每个演员姓名后插入一个冒号 (:)。于是对话框变成了这样:布鲁图斯:布拉布拉布拉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,...'


查看完整回答
反对 回复 2022-11-29
  • 1 回答
  • 0 关注
  • 178 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号