我有一个字符串:
lx-ss {\n id 1;\n type mx2090;\n template 4-32g;\n}\nlaxmx2k02-ie {\n id 2;\n chss mx2010;\n resource-plate 4co;\n}\ncable {\n id 3;\n chassis mx2010;\n plate 2c;\n}\n
我需要从上面的字符串中提取cable {\n id 3;\n chassis mx2010;\n plate 2c;\n}\n
。
我所关注的正则表达式是:
[\n\r].*\ncable:\s*([^\n\r]*)
但它没有用。
请帮助。提前谢谢。
答案 0 :(得分:2)
使用re.search
并提取字符串。
选项1
.*\n(.*{.*}\n)
m = re.search('.*\n(.*{.*}\n)', string, re.DOTALL | re.M)
print(m.group(1))
'cable {\n id 3;\n chassis mx2010;\n plate 2c;\n}\n'
正则表达式详细信息
.* # greedy match (we don't capture this)
\n # newline
( # first capture group - capture everything inside this
.*
{ # opening brace
.* # content within braces (greedy/non-greedy doesn't matter)
} # closing brace
\n
)
选项2
关于子串的定位,这个更灵活一些。
(cable\s*{.*?}\n?)
m = re.search('(cable.*?{.*?}\n?)', string, re.DOTALL | re.M).group(1)
print(m.group(1))
'cable {\n id 3;\n chassis mx2010;\n plate 2c;\n}\n'
正则表达式详细信息
( # first capture group
cable # match "cable"
\s* # match 0 or more whitespace char
{ # opening brace
.*? # non-greedy matchall
} # closing brace
\n? # optional newline
)