Python正则表达式正向查找量词替代

2024-05-15 00:26:55 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个莎士比亚戏剧的对话,基本上我想做的是:

在每个参与者名称后插入冒号(:)。因此,对话框变成如下所示:

布鲁图斯:废话废话废话

塞萨尔:废话废话废话

安东尼:废话废话废话

您可以看到情况并非如此,如下所示:

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

也就是说,卡修斯是这里的演员

但是,有些台词包含剧中演员的姓名(不是在台词的开头),以大写形式书写。见第2行

所需的是一个正则表达式或python方法,以便在每个参与者名称后插入冒号。 我们通过以下两个条件知道演员的名字:

1)它位于行的开头。

2)全部以大写格式书写。

卡修斯是第1行的演员(它同时满足两个条件)。 然而,对于布鲁图斯和卡修斯来说,这不是LINGY2的情况(他们在中间),因此在他们的名字之后没有冒号。p>


这是我的尝试,适用于第2行中不想要的单词布鲁特斯和卡西乌斯

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:  .'


Tags: and名称yourline情况参与者对话框废话
1条回答
网友
1楼 · 发布于 2024-05-15 00:26:55

你的方法太复杂了。只需在字符串的开头("^")替换两个或多个大写字母即可。这里,"\\1"是对括号中第一个组的引用

re.sub("^([A-Z]{2,})", "\\1:", line_1)
# 'CASSIUS: Brutus,...'

相关问题 更多 >

    热门问题