试图提出一个正则表达式来搜索行尾和下一行开头(如果存在)的关键字匹配
我在正则表达式下进行了尝试,但似乎未返回期望的结果
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"""
在上述情况下,输出应为关键字值
预先感谢
答案 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)
负向查找,断言右边直接不是非空格字符例如:
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+
在捕获组中,因此以后可以在代码中随意引用它们。
答案 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中观看它的匹配方式 针对一些样本输入。