簡體   English   中英

正則表達式 python 查找大寫名稱

[英]Regex python find uppercase names

我有一個類型的文本文件:

[...演講...]

NAME_OF_SPEAKER_1:[……演講……]

NAME_OF_SPEAKER_2:[……演講……]

我的目的是隔離不同演講者的演講。 因為每個發言者的名字總是用大寫字母(名字+姓氏)表示,所以它們被清楚地識別出來。 然而,在演講中可以有大寫字母的名詞(不是人名),但實際上只有一個詞長到足以讓我發出問題(它有四個字母,說它是'ABCD')。 我正在考慮用類似的東西來識別每個演講者名字的 position(我假設每個名字至少有 3 個字母)

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

為了排除那個特定的(恆定的)單詞'ABCD'。 但是,該命令會識別該詞而不是排除它。 關於如何克服這個問題的任何想法?

方括號[]僅匹配單個字符。 方括號內的圓括號()也僅匹配單個字符。 這意味着:

[ABCD][(ABCD)][AD]相同。

[^(ABCD)]匹配任何不屬於 AD 的字符

我會嘗試一些不同的東西:

^[AZ]*?:匹配以大寫字母書寫的每個單詞,從行首開始,后跟一個冒號

在您嘗試的模式中,您會得到部分匹配,因為沒有邊界,並且[AZ^(ABCD)]{3,}將匹配任何列出的字符的 3 次或更多次。

AZ 也會匹配 ABCD,所以也可以寫成[AZ^)(]{3,}

不用使用否定字符 class,您可以斷言僅由大寫字符 AZ 組成的單詞不包含 ABCD,使用否定前瞻(?!

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

正則表達式演示

如果名稱應以 3 個大寫字符開頭,並且還可以包含小寫字符、下划線或數字,則可以在匹配 3 個大寫字符后添加\w*

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

正則表達式演示

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM