2013-03-09 47 views
-1

我有一個大的文件,我需要通過使用來使用搜索RE的蟒蛇,正則表達式:我需要什麼RegEx?

下面是該文件的一個示例:

76360247039795},{"number":522141635,"catalog" 

我需要打印出只,經過{「號出現的數字流「:

此文件太大而無法發佈所有內容,並且此字符串出現約200次。這就是爲什麼我認爲我需要使用RE和我的研究,我認爲我需要使用的東西叫做「環顧四周」,但不確定。

我一直在嘗試了好久了,請幫助

在此先感謝

+2

它是一個JSON文件嗎? http://www.json.org/如果是這樣,'import json; data = json.loads(open(「file」)。read())' – hughdbrown 2013-03-09 19:14:02

+1

你在你的例子中有一個9位數字... – 2013-03-09 19:14:27

+0

字符串/文件的開始和結束是怎樣的, '它? – pradyunsg 2013-03-09 19:15:02

回答

1
import re 

with open('myLargeFile.txt', 'r') as myFile: 
    numbersList = re.findall('{"number":(\d{9})', myFile.read(), re.DOTALL) 
print numbersList 

這將被檢索創建一個僅包含字符串後出現的9位數字的列表{"number":

如果數字您正在尋找可能有更多或更少的然後9位數字,用這個章前,而不是:

numbersList = re.findall('{"number":(\d{x,y})', myFile.read(), re.DOTALL) 

,並替換x和y,以滿足您的需求。 x代表允許數字的最小位數,y代表最高位數。 例如,如果你想找到那些在數字5和9之間的所有數字,章恩將成爲:

numbersList = re.findall('{"number":(\d{5,9})', myFile.read(), re.DOTALL) 
+0

謝謝,出色地工作。如何更改您的答案以顯示不同尺碼的搭配? – user2148781 2013-03-09 19:27:23

+0

再次感謝。完美搭配 – user2148781 2013-03-09 19:36:15

+0

非常歡迎。 – 2013-03-09 20:19:07

0

試試這個,使用python re模塊,定義一個模式,找到你的模式在一個字符串s

>>> s='76360247039795},{"number":522141635,"catalog"' 
>>> import re 
>>> re.findall('number":([0-9]+)', s) #this pattern 
['522141635'] 
>>> re.findall('number":([0-9]{9})', s) #or this pattern works. 
['522141635'] 

(...)匹配的任何正則表達式內的括號 和一組中的內容可以後的匹配已經 執行

+0

可以考慮在'''' – pradyunsg 2013-03-09 19:18:38

+0

之前放置''號碼',但是可以確定「:[有些數字]出現在文件的其他任何地方,所以它會接收其他數字流 – user2148781 2013-03-09 19:19:32

1
import re 
s = '76360247039795},{"number":522141635,"catalog"' 
nl = re.findall('"number":(\d{9})', s) 
0

爲了您的JSON數據,這樣做:

import json 
with open("filename.json") as f: 
    data = json.loads(f.read()) 

現在,假設你的文件是一個字典列表,像這樣:

[ 
    {"number": 522141635, "catalog": "..."}, 
    .... 
    {"number": 999999999, "catalog": "..."} 
] 

將您的號碼打印爲:

for dictionary in data: 
    print dictionary["number"]