使用正则表达式搜索Python文件

2024-10-03 02:42:22 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个文件有很多行。每一行都以{“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:amp;:“str”和“int”的操作数类型不受支持

我需要把整条线匹配起来,这样我就可以把它拆分成一个类

有什么建议吗?谢谢你的时间


Tags: 文件in文档retxtid列表for
2条回答

这里的问题是您使用re.findall的方式,根据docs,您必须将正则表达式作为第一个参数传递,并将要匹配表达式的字符串作为第二个参数传递。就你而言,我认为你应该这样做:

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匹配的所有情况。match.group行返回找到它的位置

您可以使用regex^\{\"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

相关问题 更多 >