2017-08-30 152 views
1

我試圖在給定的一段文本中找到大寫字母。這些詞必須一個接一個地考慮,並且它們必須至少有四個。用正則表達式在文本中捕獲大寫單詞

我有一個「幾乎」工作的代碼,但它捕獲更多:[A-Z]*(?: +[A-Z]*){4,}。捕獲組還包括這些詞的開頭或結尾處的空格(如邊界)。

我有一個操場上,如果你想測試一下:https://regex101.com/r/BmXHFP/2

有沒有一種方法,使在例如捕獲正則表達式僅在第一句中的?我使用的語言是Go,它沒有後視/前進。

回答

2

在你的正則表達式,你只需要改變第二*+

​​

說明

在使用(?: +[A-Z]*),你是配套配件 「一個空格,接着0+字母」 。所以你是匹配空間。將*替換爲+時,如果後面有大寫字母,則會匹配空格。

Demo on regex101

+0

好的。任何方式我都可以確保比賽以字母開頭,而不是空格? –

+0

@RomeoMihalcea當然,將第一個'*'改爲'+'! ;-) – Mistalis

+1

我覺得啞巴,謝謝! –

1

* s替換爲+ s,並且您的正則表達式僅匹配第一句中的單詞。

.*也匹配空字符串。看着你的正則表達式,忽略了兩個[A-Z]*,剩下的就是一系列空間。使用+可確保每隔不久至少有一個大寫字符。

1

你不得不爲[A-Z]*(?: +[A-Z]+){4,}看到更新regex標記至少1大寫。

一個更好的正則表達式將允許非空格作爲[A-Z]*(?: *[A-Z]+){4,}。看到更好regex

*後,將顯示允許至少大寫字母,即使沒有空格。

相關問題