Python Regex在字符串后匹配整数

时间:2014-04-20 01:29:07

标签: python regex

我需要在python中使用正则表达式来匹配并返回文本文件中字符串"id":之后的整数。

文本文件包含以下内容:

{"page":1,"results": [{"adult":false,"backdrop_path":"/ba4CpvnaxvAgff2jHiaqJrVpZJ5.jpg","id":807,"original_title":"Se7en","release_date":"1995-09-22","p

我需要使用正则表达式获取807之后的"id"

2 个答案:

答案 0 :(得分:2)

假设文件的数量多于:

import json

with open('/path/to/file.txt') as f:
    data = json.loads(f.read())
    print(data['results'][0]['id'])

如果文件不是有效JSON,那么您可以使用以下内容获取id的值:

from re import compile, IGNORECASE

r = compile(r'"id"\s*:\s*(\d+)', IGNORECASE)

with open('/path/to/file.txt') as f:
    for match in r.findall(f.read()):
        print(match(1))

答案 1 :(得分:2)

这是你的意思吗?

#!/usr/bin/env python
import re

subject = '{"page":1,"results": [{"adult":false,"backdrop_path":"/ba4CpvnaxvAgff2jHiaqJrVpZJ5.jpg","id":807,"original_title":"Se7en","release_date":"1995-09-22","p'

match = re.search('"id":([^,]+)', subject)
if match:
    result = match.group(1)
else:
    result = "no result"
print result    

输出: 807

修改:

在回复您的评论时,添加一种简单的方法来忽略第一场比赛。如果您使用此功能,请记住向主题中添加"id":809,"etc之类的内容,以便我们可以忽略807并找到809.

n=1
for match in re.finditer('"id":([^,]+)', subject):
    if n==1:
        print "ignoring the first match"
    else:
        print match.group(1)
    n+=1