python,regex:我需要什么RegEx?

时间:2013-03-09 19:11:59

标签: python regex

我有一个大文件,我需要使用RE的

进行搜索

以下是该文件的示例:

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

我只需打印出{“number”后出现的数字流:

此文件太大而无法全部发布,此字符串出现约200次。这就是为什么我认为我需要使用RE并且从我的研究中我认为我需要使用的是一种叫做“环顾四周”的东西,但不确定。

我已经尝试了很长时间了,请帮忙

提前致谢

4 个答案:

答案 0 :(得分:1)

import re

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

这将创建一个列表,该列表仅包含出现在字符串{"number":

之后的9位数字

如果您要查找的数字可能多于或少于9位数,请改用此注册表:

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

,并替换x和y以满足您的需求。 x代表允许数字的最小位数,y代表最高位数。 例如,如果要查找5到9位数之间的所有数字,则reg ex将变为:

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

答案 1 :(得分:1)

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

答案 2 :(得分: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']
  

(...)匹配括号内的正则表达式   并且在匹配之后可以检索组的内容   执行

答案 3 :(得分: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"]