Python 在包含大量信息的文本中为日期添加字符

Python 在包含大量信息的文本中为日期添加字符,python,regex,python-3.x,Python,Regex,Python 3.x,我有一个包含日期、姓名和地址的文本文件,如下所示: 190524大卫贝克街190515彼得霍兰街等 我想在日期前加上“{”精确,并用“:精确地进行日期处理,以使其适合字典。我尝试了以下方法,但它将file.txt中的每个日期替换为循环中的最新日期,而不是一次更改一个,因此file.txt中的每个日期都变为相同。我该怎么做 file = open(file.txt) FILE = file.read() a = re.compile(r"\d\d\d\d\d\d") # To find dates

我有一个包含日期、姓名和地址的文本文件,如下所示: 190524大卫贝克街190515彼得霍兰街等

我想在日期前加上“{”精确,并用“:精确地进行日期处理,以使其适合字典。我尝试了以下方法,但它将file.txt中的每个日期替换为循环中的最新日期,而不是一次更改一个,因此file.txt中的每个日期都变为相同。我该怎么做

file = open(file.txt)
FILE = file.read()
a = re.compile(r"\d\d\d\d\d\d") # To find dates like 190213
b = re.findall(a, FILE)         # Finding all the dates and put them in a list

for k in b:
    for q in FILE.split():
        if k in q:
            c = a.sub("{\""+k+"\":", FILE)
print(c)
结果:{“190515:”大卫贝克街{“190515”:彼得·霍兰德街等


我想要的结果:{“190524:”David Bakerstreet{“190515”:Peter Hollandstreet等

您可以在替换中使用
\1
标记来引用匹配字符串的一部分

首先,捕获与组匹配的6位数字。使用此正则表达式:

(\d{6})
对于替换字符串,您只需使用
“{\\\\\\1\\”:”
,而不是
“{\\+“\”:”

实际上,您也不需要那么多for循环。假设输入文件很小,我认为您不需要任何for循环

a = re.compile(r"(\d{6})")
c = a.sub("{\"\\1\":", FILE)
print(c)

如果您的输入文件很大,那么您可能需要一点一点地读取它,而不是一次读取整个文件。

您的输入文件是什么样子的?是否需要许多字典,并且每个字典只需要一个键(日期)和一个值(名称+街道)?或者一个包含许多键和值的字典?因为你打开的曲线括号而不关闭前一个是没有意义的。这是一个嵌套字典,日期是内部的,它们将成为其余信息的键,这些信息将是元组中的值,我在末尾用曲线括号将其关闭。你不是在创建字典,你是在创建制作一个字符串。当我完成所有的格式化后,它将成为一个字典\\1在sub((“{\\\\\1\”:”)中的意思是什么?@PasPro“组1中匹配的任何内容”。如果你看看我使用的正则表达式,组1就是括号内的内容。