2017-02-01 42 views
0

字符串S看起來是這樣的:獲取前行及以下行的UPPERCASEWORD

S = "HOLY CROWS \n This looks scary. \n Horror score rises. \n MAYBE I should ask \n STACKOVERFLOW \n They would know." 

所需的輸出:

「應該是我問的StackOverflow他們會知道的。」

基本上是:

查找每一個具有被包裹在下列情況下單大寫單詞匹配:

  • 獲取字符串UPPERCASEWORD之後,直到換行符。
  • 在UPPERCASEWORD之前獲取字符串,直到遇到ANOTHERPERCASEWORD,當且僅當在它們之間沒有找到換行符時。

這是我到目前爲止有:

\w\n\w[A-Z]+\n.*?\w 

但這並不之前和之後單詞征服了整條生產線。 它也不符合第二個要求。

電流輸出:

「K計算器T」

+0

嘗試[[AZ] {2}。* \ r?\ n。* [AZ] {2}。* \ r?\ n。*'](https://regex101.com/r/hw4LxQ/1)。我假設你想匹配至少2個字母的ALLCAPS。否則,請嘗試['\ b [AZ] + \ b。* \ r?\ n。* \ b [AZ] + \ b。* \ r?\ n。*'](https://regex101.com/ R/hw4LxQ/2)。 –

回答

1

您可以使用下面的正則表達式:

(?:^|\r?\n)(.*?)\r?\n([A-Z]+)r?\n(.*?)(?:\r?\n|$) 

,並獲得以下組:

$1 $2 $3 

這將匹配任何大寫單詞,直接前後緊跟換行符。在第一次換行之前和最後一次換行之後的所有內容都將在組內。

  • (?:)一組相匹配,而不被編號(如$1$2
  • .*?匹配0個或多個字符懶惰地(非貪婪)
  • \r?\n匹配的視窗\r\n和UNIX \n換行符
  • ^$字符串的開始和結尾

這裏是live example