新手正则表达式策略

2024-04-26 09:18:45 发布

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

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

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

大约有700行这样的代码需要转换成python字典,格式如下:

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

如您所见,对于每一行,我需要在开头和结尾加上括号,将“->;”替换为“:”,并在dictionary键周围加引号。任何帮助都将不胜感激。你知道吗

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


Tags: 代码gtdictionary字典格式结尾引号括号
3条回答

您可以在不使用regex的情况下获得所需的输出:

例如:

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']}
  • 在“->;”处拆分文本并使用index as key&;index 1 as value。你知道吗
  • 使用ast.literal_eval将字符串列表转换为列表对象。你知道吗

使用正则表达式:

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']}

这是实现您需要的一种方法:

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将列表字符串转换为实际列表。你知道吗

您要求的regex“文本编辑器”解决方案可以在大多数具有regex find模式的文本编辑器中工作:

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

相关问题 更多 >