商品信息如下:
s=‘商品编号:QG0001163 商品名称:LANEIGE兰芝臻白晶透细肤水 规格:’
‘色号:120ml;商品编号:QG0001164 商品名称:LANEIGE兰芝臻白晶透保湿乳 规格:重量:100ml;商品编号:’
‘QG0001165 商品名称:LANEIGE兰芝臻白晶透精华露 规格:重量:40ml;商品编号:QG0001167 商品名称:’
‘LANEIGE兰芝保湿滋养洁颜膏 规格:重量:150ml’
也可能是这样的字符串:
s1=‘商品编号:QG0000200 商品名称: 雅漾’
以上是一个字符串我想要提取商品名称,所有的商品名称,
比如第一个我想要得到的字符串是:
LANEIGE兰芝臻白晶透细肤水 + LANEIGE兰芝臻白晶透保湿乳 + LANEIGE兰芝臻白晶透精华露 + LANEIGE兰芝保湿滋养洁颜膏;
第二个我想要得到的字符串是:雅漾;
那么怎么办呢,对于第一个字符串可以使用正则表达式,第二个可以使用find和一般的取列表范围的方法,直接上代码了:
import pandas as pd
import numpy as np
import re
s='商品编号:QG0001163 商品名称:LANEIGE兰芝臻白晶透细肤水 规格:' \
'色号:120ml;商品编号:QG0001164 商品名称:LANEIGE兰芝臻白晶透保湿乳 规格:重量:100ml;商品编号:' \
'QG0001165 商品名称:LANEIGE兰芝臻白晶透精华露 规格:重量:40ml;商品编号:QG0001167 商品名称:' \
'LANEIGE兰芝保湿滋养洁颜膏 规格:重量:150ml'
s1='商品编号:QG0000200 商品名称: 雅漾'
# data=pd.read_excel(r'C:\Users180085\Desktop\线上商城数据分析新版.6-4.12电商平台交易1.xlsx',sheet_name='元数据')
# data=pd.read_excel(r'C:\Users180085\Desktop\线上商城数据分析新版\电商平台3.30-4.5日交易明细_1(1).xls',sheet_name='元数据')
# 商品
def fun1(s):
# 如果有"规格"字符串,就是用正则表达式取"商品名称"和"规格"之间的字符串
# find函数返回查找的字符串的第一个索引位置,如果查找不到就返回-1,从左开始找
if s.find('规格')!=-1:
pattern = re.compile('商品名称:(.*?)规格', re.S) # 表达式为: (.*?)
list = pattern.findall(s)
# 找到后返回的列表,转化为以“+”相连的字符串即可
list1 = '+ '.join(list)
return list1
# 如果没有"规格"字符串,先查找“名称”的索引,然后加上3,就是商品的开始字符串,直到最后
# [a:b]选择字符串索引a,b的子字符串
else:
return s[s.find('名称:') + 3:]
print(fun1(s))
print(fun1(s1))