正则表达式python查找大写名称

正则表达式python查找大写名称,python,regex,regular-language,Python,Regex,Regular Language,我有一个以下类型的文本文件: […演讲…] 演讲者姓名1:[…演讲…] 演讲者姓名2:[…演讲…] 我的目的是孤立不同发言者的发言。因为每个说话人的名字总是用大写字母(姓名+姓氏)表示,所以他们被清楚地识别出来。然而,在演讲中可以有大写字母的名词(不是人名),但只有一个单词的长度足以引起我的注意(它有四个字母,比如说‘ABCD’)。我想用下面的东西来识别每个发言者的名字的位置(我假设每个名字至少有3个字母) re.search('[A-Z^(ABCD)]{3,}',text_to_search)

我有一个以下类型的文本文件:

[…演讲…]

演讲者姓名1:[…演讲…]

演讲者姓名2:[…演讲…]

我的目的是孤立不同发言者的发言。因为每个说话人的名字总是用大写字母(姓名+姓氏)表示,所以他们被清楚地识别出来。然而,在演讲中可以有大写字母的名词(不是人名),但只有一个单词的长度足以引起我的注意(它有四个字母,比如说‘ABCD’)。我想用下面的东西来识别每个发言者的名字的位置(我假设每个名字至少有3个字母)

re.search('[A-Z^(ABCD)]{3,}',text_to_search)

为了排除特定(常量)单词“ABCD”。但是,该命令标识该单词,而不是将其排除。关于如何克服这个问题有什么想法吗

方括号
[]
仅匹配单个字符。此外,方括号内的圆括号仅与单个字符匹配。这意味着:

[ABCD]
[(ABCD)]
[A-D]
相同

[^(ABCD)]
匹配任何非A-D字符之一的字符

我会尝试一些不同的东西:


^[A-Z]*?:
匹配以大写字母书写的每个单词,从行首开始,后跟冒号方括号
[]
仅匹配单个字符。此外,方括号内的圆括号仅与单个字符匹配。这意味着:

[ABCD]
[(ABCD)]
[A-D]
相同

[^(ABCD)]
匹配任何非A-D字符之一的字符

我会尝试一些不同的东西:


^[A-Z]*?:
匹配以大写字母书写的每个单词,从行首开始,后跟冒号

在您尝试的模式中,您会得到部分匹配,因为没有边界,
[A-Z^(ABCD)]{3,}
将匹配列出的任何字符的3次或更多次

A-Z也将匹配ABCD,因此它也可以写成
[A-Z^)(]{3,}

您可以使用负前瞻
(?!

如果名称应以3个大写字符开头,并且还可以包含小写字符、下划线或数字,则可以在匹配3个大写字符后添加
\w*

\b(?![A-Z]*ABCD)[A-Z]{3}\w*\b

在您尝试的模式中,您会得到部分匹配,因为没有边界,
[A-Z^(ABCD)]{3,}
将匹配列出的任何字符的3次或更多次

A-Z也将匹配ABCD,因此它也可以写成
[A-Z^)(]{3,}

您可以使用负前瞻
(?!

如果名称应以3个大写字符开头,并且还可以包含小写字符、下划线或数字,则可以在匹配3个大写字符后添加
\w*

\b(?![A-Z]*ABCD)[A-Z]{3}\w*\b