我有一个有很多行的文件。每行以{"id":开头,后面是带引号的id号。(即{"id"; "106")。我试图使用正则表达式逐行搜索整个文档,并打印匹配5个不同id值的行。为此,我制作了一个带有id的列表,并希望在列表中迭代只匹配以{"id": "(列表中的id号)"开头的行。我真不知道该怎么做。以下是目前为止的内容:
f= "bdata.txt"
statids = ["85", "106", "140", "172" , "337"]
x= re.findall('{"id":', statids, 'f')
for line in open(file):
print(x)
TypeError:不支持&: 'str'和'int'的操作数类型
我需要匹配整行,这样我就可以拆分它并将其放入一个类中。
任何建议吗?谢谢你的宝贵时间。
您可以从使用正则表达式^{"id": "(d+)"
的行中检索id,其中组#1的值将为您提供id。然后,您可以检查该id是否存在于statids
中。
演示:
import re
statids = ["85", "106", "140", "172", "337"]
with open("bdata.txt") as file:
for line in file:
search = re.search('^{"id": "(d+)"', line)
if search:
id = search.group(1)
if id in statids:
print(line.rstrip())
对于文件中的以下示例内容:
{"id": "100" hello
{"id": "106" world
{"id": "2" hi
{"id": "85" bye
{"id": "10" ok
{"id": "140" good
{"id": "165" fine
{"id": "172" great
{"id": "337" morning
{"id": "16" evening
的输出将是:
{"id": "106" world
{"id": "85" bye
{"id": "140" good
{"id": "172" great
{"id": "337" morning
如果这里的问题是你使用re.findall的方式,根据文档,你必须传递一个正则表达式作为第一个参数和你想要匹配表达式的字符串作为第二个参数。根据你的情况,我认为你应该这样做:
pattern = f'id: ({"|".join(statsids)})'
with open(f) as file:
for line in file:
match = re.findall(pattern, line)
print(match.group(0))
正则表达式中的管道操作符"|"工作原理与将所有id连接为字符串并在它们之间添加|相同,将找到与一个id或另一个id匹配的所有情况。这场比赛。组行返回找到它的地方。