背景
? ? ? ? 在做一个淘宝的商品信息收集是用到了,说多了要被屏蔽,直接给代码吧
目的
? ? ? ? 我有一堆字符串关键字1***************关键字2 我想提取出来两个关键字中间的内容 ,比如 "p4pTags"XXXXXXXXXXXX"icon" 这种
代码
import re
pattern=re.compile(r"关键字1(.*?)关键字1",re.S)
response_list = re.findall(pattern,待分割字符串)[0]
举例
import re
res = '"p4pTags":300,"price":588,"icon"'
pattern=re.compile(r'"p4pTags"(.*?)"icon"',re.S)
response_list = re.findall(pattern,res)[0]
结果
response_list:
:300,"price":588,
一点解释
? ? ? ? re.S 的目的是指定将带匹配的字符串看成一个字符串,这样就能处理中间含有\n 这种换行符存在的情况, 如果不指定,默认一行一行的匹配,你可能匹配出来是None
不足的点
? ? ? ? 也是我踩的坑,就是两个关键字相同的情况,不太高的定,她执照得到一半。举个例子:关键字******待提取1*********关键字******待提取2*********关键字******待提取3*********关键字 ,用这种方法不行只会得到******待提取1********* 和 ******待提取3*********
实例如下
import re
a= "mmkkjklmmkkuiommkkpoimmkkouymmkkll"
p=re.compile(r"mmkk(.*?)mmkk")
b=re.findall(p,a)
结果是
b=['jkl', 'poi']
解决不足
那怎么解决呢?答用字符串分割,代码如下
import re
a= "mmkkjklmmkkuiommkkpoimmkkouymmkkll"
p=re.compile(r"mmkk(.*?)mmkk")
b=re.findall(p,a)
c=a.split('mmkk')
此时结果是
b=['jkl', 'poi']
c= ['', 'jkl', 'uio', 'poi', 'ouy', 'll']
只要去掉开头和结尾就是我们想要的,即
ans = c[1:-1]
得到我们感兴趣的所有子字符串
ans= ['jkl', 'uio', 'poi', 'ouy']
|