我有一个带有一个文本列的数据框。示例之一如下-
line = 'user : hi\nassistant : hi , good evening. how can i help you?\n \n \nuser : order status\nassistant : please enter your case id here. \n \nuser : 0023201. \nassistant : order number: 0023201 \norder amount: 22.5 USD \nplace: oregon \nuser : order status\nassistant : please enter your case id here. \n \nuser : 0023210. \nassistant : order number: 0023210 \norder amount: 18.5 USD \nplace: iowa \n \n'
我想将pf订单号,订单金额和位置信息提取到三个单独的列中。像这样-
df = pd.DataFrame([['some info','some info','text_column',['0023201','0023210'],['22.5','18.5'],['USD','USD'],['oregon','iowa']]], columns=['col1','col2','col3','col4','col5','col6','col7'])
我尝试使用're'模块,但是不能做很多事情。
str1 = 'number:'
str2 = 'amount:'
t2 = []
for i in data['text_column']:
text = i
reg = "(?<=%s).*?(?=%s)" % (str1,str2)
r = re.compile(reg,re.DOTALL)
result = r.findall(r,text)
t2.append(result)
由于我是python新手,请提供帮助。
答案 0 :(得分:0)
您可以使用
(?s)user\s*:\s*(\d{7}).*?order amount:\s*(\d[\d.,]*) *([A-Z]+).*?place:\s*([^\r\n]+)
请参见regex demo
详细信息
(?s)
-DOTALL修饰符,可让.
跨行匹配user
-文字字符串\s*:\s*
-:
内含0+空格(\d{7})
-组1 :七位数.*?
-直到第一个文本为止的任何文本... order amount:
-文字\s*
-超过0个空格(\d[\d.,]*)
-第2组:一个数字,然后是0+个数字,逗号或点 *
-0个或更多空格([A-Z]+)
-第3组:1个以上大写字母.*?
-直到第一个文本为止的任何文本... place:
-子字符串\s*
-超过0个空格([^\r\n]+)
-第4组:除LF / CR以外的任意1个以上的字符