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,这样就查找成功,因为是从一个位置开始找。

 

Printm.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怎么截取指定字符后面的字符串,或者删除指定字符前面的字符串也行

sed 怎样在文本里指定位置插入字符

C# 按指定数量从前面或者后面删除字符串

oracle怎么截取指定字符后面的字符串,或者删除指定字符前面的字符串也行

正则表达式怎么匹配前面紧跟某个字符串的字符

正则表达式:匹配指定字符后面的字符怎样实现?