新手的正则表达策略

时间:2018-04-16 12:37:30

标签: python regex dictionary

我有一个长文本文件,每行伪代码如下所示:

big house --> ['living room', 'kitchen', 'bathroom']

大约有700行像这样需要转换为python字典,格式为:

{'big house' : ['living room', 'kitchen', 'bathroom']}

如您所见,对于每一行,我需要在开头和结尾处设置括号,替换" - >"用":"并在字典键周围放置引号。任何帮助将不胜感激。

最好的策略是找到并替换" - >"然后在单独的正则表达式中添加括号到开头和结尾,然后在另一个正则表达式中处理该键?

4 个答案:

答案 0 :(得分:4)

您可以在没有正则表达式的情况下获得所需的输出:

<强>实施例

import ast
s = """big house --> ['living room', 'kitchen', 'bathroom']
big house2 --> ['living room', 'kitchen', 'bathroom']"""
d = {}
for i in s.split("\n"):
    val = i.split("-->")
    d[val[0].strip()] = ast.literal_eval(val[1].strip())
print(d)

<强>输出:

{'big house2': ['living room', 'kitchen', 'bathroom'], 'big house': ['living room', 'kitchen', 'bathroom']}
  • 将文字拆分为&#34; - &gt;&#34;并使用index as key&amp; index 1 as value
  • 使用ast.literal_eval将字符串列表转换为列表对象。

使用Regex:

import re
import ast
s = """big house --> ['living room', 'kitchen', 'bathroom']
big house2 -->  ['living room', 'kitchen', 'bathroom']"""
d = {}
for i in re.findall("(.*)\s+\-->\s+(.*)", s):
    d[i[0].strip()] = ast.literal_eval(i[1].strip())
print(d)
#{'big house2': ['living room', 'kitchen', 'bathroom'], 'big house': ['living room', 'kitchen', 'bathroom']}

答案 1 :(得分:3)

这是实现所需目标的一种方式:

import ast

with open('myfile.txt') as f:
    result = {}
    for line in f:
        line = line.split('-->')
        cleanLine = [l.strip() for l in line]
        result[cleanLine[0]] = ast.literal_eval(cleanLine[1])

ast.literal_eval会将列表字符串转换为实际列表。

答案 2 :(得分:3)

正则表达式&#34;文本编辑器&#34;您要求的解决方案适用于大多数使用正则表达式查找模式的文本编辑器:

Find:    (.*) --> (.*)
Replace: {'$1': $2}

答案 3 :(得分:1)

你可以试试dict理解:

import re
import ast
print({re.search(r"(\w.+)?-->\s(\['\w.+?\])", line).group(1).strip():ast.literal_eval(re.search(r"(\w.+)?-->\s(\['\w.+?\])",line).group(2)) for line in open('new_filea','r')})

输出:

{'big house': ['living room', 'kitchen', 'bathroom']}

P.S:如果你不清楚close文件是否发生了什么,你也可以阅读这篇文章。