鍍金池/ 問(wèn)答/Java  Python/ python如何精確匹配

python如何精確匹配

各位大蝦好!

小弟有一個(gè)文件里面是這個(gè)樣子:

data_center = { 
    access_key = {
        ak = "this is ak", 
        sk = "this is sk",
                },
    rc_server_port = 8989,
    rc_proxy_slb_port = 8990,               
}

region = {
    id = "8",
    access_key = {
        {ak = "this is ak", sk = "this is sk"},
    },
    rtsp_url_key = "6y7u8i9o0p",
}

我現(xiàn)在想獲取整個(gè)data_center這個(gè)節(jié)點(diǎn)的內(nèi)容,于是我就如下寫:

key_start = 'data_center'
key_end = '}'
pattern = re.compile(key_start+'(.*?)'+key_end,re.S)
result = pattern.findall(data)
print result

但是得到的結(jié)果是

[' \r\n\taccess_key = {\r\n\t\tak = "this is ak", \r\n\t\tsk = "this is sk",\r\n       \t\t ']

也就是說(shuō)匹配到了前一個(gè)“},”而不是后面那個(gè)“}”,請(qǐng)問(wèn)我該怎么辦?

第二個(gè)問(wèn)題,我想得到的格式跟原來(lái)的一樣,還是json的格式,請(qǐng)問(wèn)我該怎么辦?

回答
編輯回答
悶騷型

最后那個(gè)}后面跟著換行吧

import os
key_end = '}' + os.linesep

至于第二個(gè)問(wèn)題,格式是在的啊print result[0]試試

2018年4月2日 10:26
編輯回答
不歸路

第一個(gè)問(wèn)題:

pattern = re.compile(key_start + '(.*?\}.*?)' + key_end, re.S)
改成以上這樣確定的方式應(yīng)該是可以的
2018年3月16日 23:12
編輯回答
情殺

結(jié)束位置 先匹配到 region, 然后把匹配到的結(jié)果去掉末尾的 } 就可以了吧

2017年9月26日 09:08