Regex python查找大写名称

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

我有一个文本文件,类型为:

[...语音...]

NAME_OF_SPEAKER_1:[...语音...]

NAME_OF_SPEAKER_2:[...语音...]

我的目的是隔离各个演讲者的讲话。由于每个发言人的姓名始终以大写字母表示(姓名+姓氏),因此可以清楚地识别它们。但是,在演讲中可以有大写字母的名词(不是人们的名字),但实际上只有一个单词足够长,可以给我发出声音(它有四个字母,说是“ ABCD”)。我当时想用[

来确定每个说话者姓名的位置(我假设每个姓名的名称至少包含3个字母)
re.search('[A-Z^(ABCD)]{3,}',text_to_search)

为了排除该特定(恒定)词“ ABCD”。但是,该命令标识该单词而不是排除它。关于如何克服这个问题的任何想法?

python regex regular-language
2个回答
1
投票

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

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

不是使用否定的字符类,而是可以使用负前瞻(?!断言仅包含大写字符A-Z的单词不包含ABCD。>

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

Regex demo

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

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

Regex demo


1
投票

方括号[]仅匹配单个字符。同样,方括号内的圆括号()仅匹配单个字符。这意味着:

© www.soinside.com 2019 - 2024. All rights reserved.