获得Preceding Line&以下行为UPPERCASEWORD

时间:2017-02-01 19:33:47

标签: python regex python-3.x regex-lookarounds

字符串S如下所示:

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之前获取字符串,直到遇到ANOTHERUPPERCASEWORD,当且仅当在它们之间没有找到换行符时。

这是我到目前为止所拥有的:

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

但这并没有征服这个词之前和之后的完整一行。 它也不符合第二个要求。

当前输出:

  

“k STACKOVERFLOW T”

1 个答案:

答案 0 :(得分:1)

您可以使用以下正则表达式:

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

并获得以下群组:

$1 $2 $3

这将匹配任何大写单词,直接在前面和后面跟一个换行符。第一个换行符之前和最后一个换行符之后的所有内容都将在组内。

  • (?:)匹配未编号的群组(例如$1$2
  • .*?懒惰地匹配0个或多个字符(非贪婪)
  • \r?\n匹配Windows \r\n和UNIX \n linebreak
  • ^$字符串的开头和结尾

以下是live example