Python正则表达式-正向后置量词替代项

问题描述 投票:0回答:1

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

在每个演员名称后插入一个冒号(:)。这样对话框就变成了这样:

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

python python-3.x regex regex-lookarounds
1个回答
1
投票

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

re.sub("^([A-Z]{2,})", "\\1:", line_1)
# 'CASSIUS: Brutus,...'
© www.soinside.com 2019 - 2024. All rights reserved.