python3用正则怎么删除指定字符串前面和后面的内容,只保留中间部分的内容,并存入列表?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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全都是小写,刚刚试了下,还是报的一样错误,估计应该还是哪里正则语法不对
参考技术A筛选两遍,第一遍以非贪婪模式找出所有匹配有...中的字符串,第二遍剔除其中含有非法字符的匹配结果。
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']
正则表达式解释
如果我让你在“ceshi”这一行字符串中,找到字符串ce并且用正则表达式print出来,你该怎么编写?
Import re
代码解释:导入python自带的re库。
M = re.match(‘ce’,‘ceshi’)
代码解释:
(‘ce’,‘ceshi’)——你要在‘ceshi’里面找‘ce’。所以编写格式是:前面写你要找的,后面写在里面找你要找的。
re.match——这个功能的解释:必须从第一个位置开始找,否则会查找失败。比如你的目标是在‘abcde’中找cde,这样就查找失败,因为不是从第一个位置开始找。
比如你的目标是在‘abcde’中找abc,这样就查找成功,因为是从一个位置开始找。
Print(m.group())
代码解释:这样就找到了ce。并且打印出来了。
Ok,如果我让你在“ceshi”这一行字符串中,找后面的字符串shi并且用正则表达式print出来,你该怎么编写?
M = re.match(‘ce’,‘ceshi’),替换成:M = re.search(‘shi’,‘ceshi’)。
代码解释:
re.search——全局搜索,只要里面有你想要找的,都能找成功。
比如你要在“ceshi”里面找“shi”,不用像match那样必须从第一个位置开始找,都能找成功。
比如你要在“efghijk”里面找“hijk”,把代码写成M = re.search(‘hijk’,‘efghijk’)就行了。
以上是关于python3用正则怎么删除指定字符串前面和后面的内容,只保留中间部分的内容,并存入列表?的主要内容,如果未能解决你的问题,请参考以下文章
oracle怎么截取指定字符后面的字符串,或者删除指定字符前面的字符串也行