python3用正则怎么删除指定字符串前面和后面的内容,只保留中间部分的内容,并存入列表?

这个year字段,在后面可能还会有多个,只需要前面第一个year字段中的内容就可以了

这个图片清楚了,我大概猜一下就是就是要把字符串的列表变成真正的列表?

首先把false变成False(因为python中False要求F大写)

然后用eval就行了

string = re.sub('false','False',string)

li = eval(re.search(r'\[\[[\s\S]+\]\]',string).group())

追问

追答

把你的string 直接复制过来我看看时间长应该回溯的问题
把[\s\S]+改成[\s\S]+?
改成懒惰查找

追问

嗯,改成精确查找就OK了,速度相当的快,也没有报错了,就是前面和后面不需要的内容也都给提取出来了,我那个文件数据太大了,我是直接打开的文本,进行查抄,然后手工精简数据进行截的图发上来的,主要就是把所有文档中("year":)前面所有的内容,和 ("fieldflashData":)后面所有的内容全部删掉,包括 括号中的字符串也不需要,只保留中间的就搞定了

追答

列表中也有你不要的数据?简单方法
对列表进行循环保留你需要的。你告诉我一下列表中有那些是需要的哪些是不需要的。
你把你的列表举个例子我看看包括一下你需要的和不需要的就好了。不用太多内容。

追问

大哥,这个  year 字段在后面文档中还会出现一次的,只要截取前面第一次出现的这个year字段就可以了

大哥,这个year字段在后面还会出现一次的,所以只要截取前面第一次出现的year,然后删除前面的内容就可以了,后面的就截取到fieldflashData这个字段就可以了,这个字段只有一个

追答

string1 = re.search(r'year":\n(\[\[[\s\S]+?\]\])',string).group(1)

string1 = re.sub('false','False',string1)

li = eval(string1)

追问

哥,不知道为什么我这边是报错的,不能运行了,是我哪里弄错了吗?

追答

哦 你数据中Year头一个字母y是大写
string1 = re.search(r'Year":\n(\[\[[\s\S]+?\]\])',string).group(1)

追问

我刚刚看了下,不是大写的,year全都是小写,刚刚试了下,还是报的一样错误,估计应该还是哪里正则语法不对

温馨提示:答案为网友推荐,仅供参考
第1个回答  2020-02-13


筛选两遍,第一遍以非贪婪模式找出所有匹配有...中的字符串,第二遍剔除其中含有非法字符的匹配结果。

test_str = '有干燥剂中有干燥中有发明了XX技术中有发明了XX中'
regex1 = r'有(.+?)中' #匹配所有'有...中'之间的字符
pre_match = re.findall(regex1, test_str) #结果:['干燥剂','干燥','发明了XX技术','发明了XX']
regex2 = r'(?!.*干燥剂)(?!.*发明了.+技术)' #不能含有干燥剂和发明了..技术字样
final_match = [s for s in pre_match if re.match(regex2, s)] #结果:['干燥','发明了XX']





相似回答