Python正则表达式匹配字符串后的整数
我需要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
“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我将在答案中添加这段代码,以便正确格式化。顺便说一句,我看到你最近在这个网站上,所以如果你不知道这一点,如果你觉得某人的答案有用,你可以投票。你甚至可以在一个问题上投票选出几个答案。当然你没有义务这么做。