2013-03-09 28 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"]