Python正则表达式匹配字符串后的整数

Python正则表达式匹配字符串后的整数,python,regex,Python,Regex,我需要python中的正则表达式来匹配并返回文本文件中字符串“id”:后的整数 文本文件包含以下内容: {"page":1,"results": [{"adult":false,"backdrop_path":"/ba4CpvnaxvAgff2jHiaqJrVpZJ5.jpg","id":807,"original_title":"Se7en","release_date":"1995-09-22","p 我需要使用正则表达式在“id”之后获取807。假设文件中有更多内容: import js

我需要python中的正则表达式来匹配并返回文本文件中字符串
“id”:
后的整数

文本文件包含以下内容:

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

我需要使用正则表达式在
“id”
之后获取
807

假设文件中有更多内容:

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))

假设文件的内容不止这些:

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))
这就是你的意思吗

#!/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等的内容,这样我们就可以忽略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
这就是你的意思吗

#!/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”等的内容,以便我们可以忽略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

工作完美。如何使它向前找到第二个实例并忽略第一个实例?@user3552978一种方法是迭代匹配:
对于re.finditer(“'id:”([^,]+)”,subject)中的匹配:
然后忽略第一个。谢谢。我在寻找如何忽略第一个实例时遇到了一些问题。我有以下内容,它可以正常工作,但返回了包括第一个实例在内的所有内容:f=open('temp.txt','r')subject=f.read(),用于re.finditer('id'):([^,]+'),subject):print match.group(1)f.close()@user3552978我将在答案中添加这段代码,以便正确格式化。顺便说一句,我看到你最近在这个网站上,所以如果你不知道这一点,如果你觉得某人的答案有用,你可以投票。你甚至可以在一个问题上投票选出几个答案。当然,你没有义务这么做。工作很完美。如何使它向前找到第二个实例并忽略第一个实例?@user3552978一种方法是迭代匹配:
对于re.finditer(“'id:”([^,]+)”,subject)中的匹配:
然后忽略第一个。谢谢。我在寻找如何忽略第一个实例时遇到了一些问题。我有以下内容,它可以正常工作,但返回了包括第一个实例在内的所有内容:f=open('temp.txt','r')subject=f.read(),用于re.finditer('id'):([^,]+'),subject):print match.group(1)f.close()@user3552978我将在答案中添加这段代码,以便正确格式化。顺便说一句,我看到你最近在这个网站上,所以如果你不知道这一点,如果你觉得某人的答案有用,你可以投票。你甚至可以在一个问题上投票选出几个答案。当然你没有义务这么做。