2015-09-19 58 views
0

這是我正在使用的數據字符串。使用三個固定字符之間的正則表達式提取數據

f = """{"id"=156,"pid"=656,"sd"=656,"id"=156,"pid"=656}""" 

我想讀取id的值。所以我正在使用

regex = '"id":(.+?),"pid"' 
pattern = re.compile(regex) 
ida = re.findall(pattern,f) 

現在正則表達式返回兩個id值。 我想只讀取「id」和「sd」之間的id值。我們怎麼可以寫一個正則表達式語句包括「PID」和「SD」拿到第一個「身份證」的唯一價值

回答

3

re.findall()回報模式的所有比賽,而不是你可以使用re.search獲得的第一id值:

>>> re.search(r'"id"=(\d+)',f).group(1) 
'156' 

需要注意的是,如果你只是想找到一個模式的第一次出現你不需要另外一個額外的條件,re.search會默認返回。

0

您可以使用lookarounds正則表達式:

>>> f = """{"id"=156,"pid"=656,"sd"=656,"id"=156,"pid"=656}""" 
>>> print re.search(r'(?<="id"=)(\w+)(?=.*"sd")', f).group() 
156 

(?=.*"sd")將確保"sd"是我們的後比賽。

(?<="id"=)將確保"id"=就在我們的比賽之前。

相關問題