繁体   English   中英

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

[英]Regex Search end of line and beginning of next line

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

我已经尝试过下面的正则表达式,但似乎没有返回想要的结果

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"""

上述情况下的输出应该是关键字值

提前致谢

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

在您尝试的模式中使用 2 个捕获组:

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

解释

  • (?<!\\S)负向后视,断言左边的不是非空白字符
  • (keyword)在与关键字匹配的组 1 中捕获
  • [\\t ]*匹配 0+ 个制表符或空格
  • \\r?\\n匹配换行符
  • [\\t ]*匹配 0+ 个制表符或空格
  • (\\w+)捕获第 2 组匹配 1+ 个单词字符
  • (?!\\S)负前瞻,断言直接在右边的不是非空白字符

正则表达式演示| Python 演示

例如:

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)))

输出

关键字值

\\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+位于捕获组中,因此您可以在稍后的代码中根据需要引用它们。

在这里试试吧!

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

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

可能有点接近并且value\\2 ,您可以使第一组不被捕获,然后:

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

\\1value


如果你想探索/简化/修改表达式,它已在regex101.com 的右上角面板中进行了解释 如果您愿意,您还可以在此链接中观看它如何与某些示例输入匹配。


暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM