我正在解决我无法解决的正则表达式问题。我制作的正则表达式
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 ', '?')
答案 0 :(得分:3)
您可以使用
(?m)^\[([^][]*)]\s+(.*(?:\n(?!\[[^][]*]).*)*)
请参见regex demo
详细信息
^
-一行的开头\[
-[
([^][]*)
-第1组:除[
和]
以外的任何0+个字符]
-一个]
字符\s+
-超过1个空格(.*(?:\n(?!\[[^][]*]).*)*)
-第2组:
.*
-该行的其余部分(?:\n(?!\[[^][]*]).*)*
-零次或多次重复:
\n(?!\[[^][]*])
-换行符后没有[...]
子字符串.*
-该行的其余部分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+(.*(?:\n(?!\[[^][]*]).*)*)", re.M)
for value in messageRegex.findall(message):
print(value)
输出:
('key X', 'value')
('key X', 'value value')
('key X', 'value\nvalue\nvalue\nvalue')
('key ', 'value')
('key ', '?')
('key ', '?')