【发布时间】:2019-05-10 11:46:11
【问题描述】:
我正在解决这个我无法解决的正则表达式问题。我做的正则表达式
import re
message = """[key X] value
[key X] value value
[key X] value
value
value
value
[key ] value
[key ] ?
[key ] ?"""
messageRegex = re.compile(r"\[(.*?)][\s](.*)")
for value in messageRegex.findall(message):
print(value)
输出如下所示,并非所有内容都被捕获。
('key X', 'value') ('key\tX', 'value value') ('key\tX', 'value')
('key\t ', 'value') ('key\t ', '?') ('key\t ', '?')
我希望输出看起来像
('key X', 'value') ('key\tX', 'value value') ('key\tX', 'value \nvalue \nvalue \nvalue')
('key\t ', 'value') ('key\t ', '?') ('key\t ', '?')
【问题讨论】:
-
锚定在开头并使前两个模式可选 -
^(?:\[(.*?)]\s+)?(.*),请参阅 regex101.com/r/h3wwUa/1 -
@WiktorStribiżew 感谢您的回复。我可能没有正确解释它 - 从您提供的链接中,我正在寻找第 4、5、6 行中的“值”作为匹配 3 的一部分
-
你应该在问题中解释它,请编辑它。
message是单个字符串变量吗? -
是的,消息是一个字符串。
-
试试
re.findall(r'^\[([^][]*)]\s+(.*(?:\n(?!\[[^][]*]).*)*)', message, re.M)