正则表达式 python 查找大写名称
Regex python find uppercase names
我有一个类型的文本文件:
[...语音...]
NAME_OF_SPEAKER_1:[...语音...]
NAME_OF_SPEAKER_2:[...语音...]
我的目的是隔离不同演讲者的演讲。他们被清楚地识别出来,因为每个演讲者的名字总是以大写字母(名字+姓氏)表示。但是,在演讲中可以有大写的名词(不是人名),但实际上只有一个单词足够长给我出题(它有四个字母,说是'ABCD') .我想用
之类的东西来识别每个演讲者姓名的位置(我假设每个名字至少有 3 个字母)
re.search('[A-Z^(ABCD)]{3,}',text_to_search)
为了排除那个特定的(常量)词'ABCD'。但是,该命令会识别该词而不是排除它。关于如何克服这个问题的任何想法?
方括号[]
仅匹配单个字符。此外,方括号内的圆括号 ()
仅匹配单个字符。这意味着:
[ABCD]
和[(ABCD)]
等同于[A-D]
。
[^(ABCD)]
匹配任何字符,但不是 A-D
我会尝试不同的东西:
^[A-Z]*?:
匹配以大写字母书写的每个单词,从一行的开头开始,后面跟一个冒号
在您尝试的模式中,您会得到部分匹配,因为没有边界,并且 [A-Z^(ABCD)]{3,}
将匹配任何列出的字符 3 次或更多次。
A-Z也会匹配ABCD,所以也可以写成[A-Z^)(]{3,}
您可以使用否定先行 (?!
断言仅由大写字符 A-Z 组成的单词不包含 ABCD,而不是使用否定字符 class
\b(?![A-Z]*ABCD)[A-Z]{3,}\b
如果名称应以 3 个大写字符开头,并且可以包含小写字符、下划线或数字,则可以在匹配 3 个大写字符后添加 \w*
:
\b(?![A-Z]*ABCD)[A-Z]{3}\w*\b
我有一个类型的文本文件:
[...语音...]
NAME_OF_SPEAKER_1:[...语音...]
NAME_OF_SPEAKER_2:[...语音...]
我的目的是隔离不同演讲者的演讲。他们被清楚地识别出来,因为每个演讲者的名字总是以大写字母(名字+姓氏)表示。但是,在演讲中可以有大写的名词(不是人名),但实际上只有一个单词足够长给我出题(它有四个字母,说是'ABCD') .我想用
之类的东西来识别每个演讲者姓名的位置(我假设每个名字至少有 3 个字母)re.search('[A-Z^(ABCD)]{3,}',text_to_search)
为了排除那个特定的(常量)词'ABCD'。但是,该命令会识别该词而不是排除它。关于如何克服这个问题的任何想法?
方括号[]
仅匹配单个字符。此外,方括号内的圆括号 ()
仅匹配单个字符。这意味着:
[ABCD]
和[(ABCD)]
等同于[A-D]
。
[^(ABCD)]
匹配任何字符,但不是 A-D
我会尝试不同的东西:
^[A-Z]*?:
匹配以大写字母书写的每个单词,从一行的开头开始,后面跟一个冒号
在您尝试的模式中,您会得到部分匹配,因为没有边界,并且 [A-Z^(ABCD)]{3,}
将匹配任何列出的字符 3 次或更多次。
A-Z也会匹配ABCD,所以也可以写成[A-Z^)(]{3,}
您可以使用否定先行 (?!
\b(?![A-Z]*ABCD)[A-Z]{3,}\b
如果名称应以 3 个大写字符开头,并且可以包含小写字符、下划线或数字,则可以在匹配 3 个大写字符后添加 \w*
:
\b(?![A-Z]*ABCD)[A-Z]{3}\w*\b