【问题标题】:Get Preceding Line & Following Line for an UPPERCASEWORD获取大写单词的前行和后行
【发布时间】:2017-02-01 19:33:46
【问题描述】:

字符串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 堆栈溢出 T"

【问题讨论】:

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


【解决方案1】:

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

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

并获得以下组:

$1 $2 $3

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

  • (?:) 匹配没有编号的组(如$1$2
  • .*? 惰性匹配 0 个或多个字符(非贪婪)
  • \r?\n 匹配 Windows \r\n 和 UNIX \n 换行符
  • ^$ 字符串的开始和结束

这是live example

【讨论】:

    猜你喜欢
    • 2021-04-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多