2013-12-11 32 views
3

這裏有一個適合您的正則表達式嚮導。正則表達式適用於非連續的大寫單詞

這是在Notepad ++中使用,即它直接進入搜索和替換對話框。

我需要匹配並突出顯示嵌套在字符串中的兩個或多個字符的大寫字母的單獨單詞,但大寫字母不能是連續的,它們必須始終由小寫字母(或小寫名詞與第一個字母大寫)或是在句子的開始或結束之後或小寫字之前(或再次與第一個字母的單詞大寫。

鑑於串這是一個句子中帶有一些大寫的單詞

我需要匹配「,但不匹配「WORDS」或「IN」,因爲WORDS後面跟着另一個大寫字母,IN前面是相同的。

該字符串應假定爲多行。

我試圖與向前看符號,但慘淡經營

失敗

任何幫助將不勝感激!

:-)感謝

回答

1

您應該檢查與負周圍字符先行和負回顧後:

(?<![A-Z]\s)\b[A-Z]+\b(?!\s[A-Z]) 

Live demo

記事本++ v6.5.1 &件作品多行的目的也

Notepad++ v6.5.1

+0

如果有什麼是雙空間?嗯... –

+2

抱歉,在Notepad ++ – Jerry

+0

@Jerry在v6.5中沒有負面後顧之處,它的作用就像魅力。 – revo

0

我會嘗試

(^|\.\s+|[a-z]\s+)([A-Z]+)(\.|\s+[a-z]|$) 

匹配:一個週期或啓動的線或小寫字母單詞的末尾;後跟一個大寫字母;隨後是一段時間,行尾或小寫字的開始。

這個詞本身在組2相匹配。如果記事本++支持環視斷言,你可以這樣做,這樣只捕獲字是單大寫單詞:

(?:^|\.\s+|[a-z]\s+)([A-Z]+)(?:\.|\s+[a-z]|$) 
0

我會使用

(?<![[:upper:]]) ([[:upper:]]+) (?!([[:upper:]]|)+) 

這也將選擇什麼您的區域認爲是大寫,而不僅僅是AZ

1

我試着這個正則表達式,它適用於我使用記事本++查找/替換的'標記'功能。我不確定你是否還有其他測試用例。

(?:[[:lower:]][^A-Za-z]*|\A)\K\b[[:upper:]]+\b(?=[^A-Za-z]*[[:lower:]]|\Z) 

我使用\A\Z因爲你提到的多線。

regex101 demo(有一些解釋)。

一定要檢查'匹配大小寫'。

前: enter image description here

後: enter image description here

編輯:由於每次更新,逆高亮,我想出了一個...一個有點冗長:

[^A-Z]+|(?:(?=[A-Z]*[a-z])\b[A-Za-z]+\b)|(?:\b[A-Z]+\b(?=[^a-z]+[A-Z])(?:[^a-z]*[A-Z]+)*) 

regex101 demo

enter image description here

0

您可以使用此模式:

(?:[^A-Z]\s+|[^a-zA-Z\s]|\A)\K[A-Z]+\b(?!\s+[A-Z]) 
+0

你自己測試過嗎? http://regex101.com/r/hL2kG8 – revo

+0

@revo:否<°)))))))))> –

+0

Notepad ++不支持非捕獲組'(?:' – revo

相關問題