regex来匹配模式,然后将其从文本文件中删除



我现在正面临一个问题。我试图写一个正则表达式代码,以匹配文本文件中的模式,并找到它后,从当前文本中删除它。

# Reading the file data and store it 
with open('file.txt','r+') as f:
file = f.read()
print(file)

这是我打印的文本

'{ntINFOtDATA_NUMBERt974nt{nttDAT_CQFDntt{ntttsome random text t787878ntt}nttDATA_TO_MATCHntt{ntt1tbunch of characters t985ntt2tbunch of datatt78ntt}nt}ntINFOtDATA_CATCHMEt123nt{ntt3tbunch of characters ntt2tbunch of datasnt}ntINFOtDATA_INTACTtt456nt{ntt3tbunch of numbers ntt2tbunch of textsnt}nn'

下面是用编辑器打开的同一文本的图片:图片在这里我想匹配/搜索DATA_TO_MATCH,然后寻找最后一个右括号"}";然后去掉这个右括号和下一个括号之间的所有东西。我想对DATA_CATCHME做同样的事情。

下面是预期的结果:

'{ntINFOtDATA_NUMBERt974nt{nttDATA_CQFDntt{ntttsome random text t787878ntt}nnt}ntINFOtDATA_INTACTtt456nt{ntt3tbunch of numbers ntt2tbunch of textsnt}nn}n'

下面是用编辑器打开的相同文本结果的图片:图像在这里

I tried some

import re
#find the DATA_TO_MATCH
re.findall(r".*DATA_TO_MATCH",file)  
#find the DATA_CATCHME
re.findall(r".*DATA_CATCHME",file)  
#supposed to find everything before the closed bracket "}"  
re.findall(r"(?=.*})[^}]*",file)  

但是我不是很熟悉regex和re,我不能得到我想要的,我想当我找到它的时候我会用

re.sub(my_patern,'', text) 

将它从我的文本文件中删除

这里的主要技巧是使用re.MULTILINE标志,它将跨行。你也应该直接使用re.sub而不是re.findall

一旦你理解了正则表达式,它本身就很简单。查找DATA_TO_MATCH之前的所有字符,然后清除可能存在的任何空白(因此是*),读取{,然后读取所有不是}的字符,最后使用}。第二种策略非常相似。

import re
with open('input.txt', 'r+') as f:
file = f.read()
# find the DATA_TO_MATCH
file = re.sub(r".*DATA_TO_MATCHs*{[^}]*}", "", file, flags=re.MULTILINE)
# find the DATA_CATCHME
file = re.sub(r".*DATA_CATCHME[^{]*{[^}]*}", "", file, flags=re.MULTILINE)
print(file)

最新更新