正则表达式逐行大字符串

时间:2013-08-25 19:06:33

标签: python regex loops

我在文件中有很多行,如下所示:

{"first_name":"John","last_name":"Smith","age":30}
{"first_name":"Tim","last_name":"Johnson","age":34}

我首先尝试将其作为带有json模块的字典导入,因此我可以只打印键的值。问题是某些行缺少右大括号或有其他问题,并且每行的字段顺序不同。这阻止了导入。

所以现在我想用正则表达式来做这件事。我有这个:

fo = open("c:\\newgoodtestsample.txt", "r")
x = fo.read()
match1 = re.search('first_name"(.*?)"(.*?)"', x) 
if match1:
    print match1.group(2)

返回名称的值。我希望能够返回其他领域。这在一个正则表达式测试程序中工作,但我不能让它在我的代码中工作:

(first_name|last_name|age)"(.*?)"(.*?)"

最后,一旦弄明白,我需要读取文件中的每一行(而不仅仅是第一行),并将每行所请求的正则表达式数据打印到文件中。我试过插入一个for循环,但我一直反复重复第一行所以我必须错误地插入它。任何帮助表示赞赏。

1 个答案:

答案 0 :(得分:1)

以下似乎可以做你想要的,正则表达式应该给你回来作为匹配组来自JSON的所有值字段(尽管不是存储这些值的关键字)。

我还鼓励您使用with上下文管理器,因为它会在读取所有行后自动关闭文件句柄,这很容易通过for循环完成。

with open("c:\\newgoodtestsample.txt", "r") as fo:
    for line in fo:
        result = re.findallr'"(\w*?)":"?(\w*)"?', line) 
        d = {k:v for k,v in re.findall(r'"(\w*?)":"?(\w*)"?', line)}
        if 'first_name' in d:
            # print first_name into file
        else:
            # print empty first_name field