[英]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)
负前瞻,断言直接在右边的不是非空白字符例如:
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+)
\\1
是value
。
如果你想探索/简化/修改表达式,它已在regex101.com 的右上角面板中进行了解释。 如果您愿意,您还可以在此链接中观看它如何与某些示例输入匹配。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.