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

2024-03-29 15:00:15 发布

您现在位置:Python中文网/ 问答频道 /正文

尝试使用正则表达式在行尾和下一行开头搜索关键字匹配(如果存在)

我尝试了下面的正则表达式,似乎没有返回预期的结果

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

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

提前谢谢


Tags: reismy关键字frthiskeywordsentence
3条回答

\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!

我的猜测是,根据新行的数量,一个表达式类似于:

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

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

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

\1value。你知道吗


If you wish to explore/simplify/modify the expression, it's been explained on the top right panel of regex101.com. If you'd like, you can also watch in this link, how it would match against some sample inputs.


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

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

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

解释

  • (?<!\S)负的lookback,断言直接在左边的不是非空格字符
  • (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)))

输出

keyword value

相关问题 更多 >