使用python

时间:2017-09-21 21:36:27

标签: python regex string

我有一个字符串:

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]*)

但它没有用。

请帮助。提前谢谢。

1 个答案:

答案 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
)