正则表达式搜索行的末尾和下一行的开始

时间:2019-09-06 16:04:24

标签: python regex

试图提出一个正则表达式来搜索行尾和下一行开头(如果存在)的关键字匹配

我在正则表达式下进行了尝试,但似乎未返回期望的结果

re.compile(fr"\s(?!^)(keyword1|keyword2|keyword3)\s*\$\n\r\((\w+\W+|W+\w+))", re.MULTILINE | re.IGNORECASE)

例如,我的输入为

sentence = """ This is my keyword
/n value"""

在上述情况下,输出应为关键字值

预先感谢

3 个答案:

答案 0 :(得分:1)

您可以匹配关键字(或使用alternation)来匹配更多关键字,并在关键字之后和换行符之后考虑尾随制表符和空格。

按照您尝试的模式使用2个捕获组:

(?<!\S)(keyword)[\t ]*\r?\n[\t ]*(\w+)(?!\S)

说明

  • (?<!\S)后面是负数,则断言直接在左边的不是非空格字符
  • (keyword)捕获与关键字匹配的组1
  • [\t ]*匹配0+制表符或空格
  • \r?\n匹配换行符
  • [\t ]*匹配0+制表符或空格
  • (\w+)捕获第2组匹配1个以上的字符字符
  • (?!\S)负向查找,断言右边直接不是非空格字符

Regex demo | Python demo

例如:

import re

regex = r"(?<!\S)(keyword)[\t ]*\r?\n[\t ]*(\w+)(?!\S)"
test_str = (" This is my keyword\n"
    " value")

matches = re.search(regex, test_str)

if matches:
    print('{} {}'.format(matches.group(1), matches.group(2)))

输出

  

关键字值

答案 1 :(得分:0)

\b(keyword)\n(\w+)\b怎么样?

\b(keyword)\n(\w+)\b

\b                      get a word boundary
  (keyword)             capture keyword (replace with whatever you want)
           \n           match a newline
             (\w+)      capture some word characters, one or more
                  \b    get a word boundary

由于keyword\w+在捕获组中,因此以后可以在代码中随意引用它们。

Try it here!

答案 2 :(得分:0)

我的猜测是,根据您可能会有的新行数,该表达式类似于:

df.stack().idxmin()

Out[108]: ('index0', 'col0')

可能有点接近并且\b(keyword1|keyword2|keyword3)\b[r\n]{1,2}(\S+) value中,您可以使第一组未被捕获,然后:

\2

\b(?:keyword1|keyword2|keyword3)\b[r\n]{1,2}(\S+) \1


  

如果您想探索/简化/修改表达式,可以   在右上角的面板上进行了说明   regex101.com。如果您愿意,   也可以在this link中观看它的匹配方式   针对一些样本输入。