厂家提供的货品明细表,类似于下面这种格式:佳洁士强根固齿牙膏90克佳洁士健康专家全优7效牙膏140克佳洁士草本水晶牙膏(清爽薄荷香型)105克佳洁士劲爽清新漱口水250mL现在想匹配克数前面的文字,例如第一行想匹配“佳洁士强根固齿牙膏”,现在用的是这样的正则:\w+(?=\d+克)但是过滤出来的是"佳洁士强根固齿牙膏9",也就是说零宽断言中\d+只匹配了一个数字0,头疼中。刚学正则,请教下是哪地方不对?感谢大家的耐心回答!补充下问题,我是看的正则表达式30分钟入门教程,用的是作者自己写的正则工具,也就是.net中的正则。货品明细是一个excel表,现在要把上面的信息拆成2列,一列是品名“佳洁士强根固齿牙膏”,一列是规格“90克”,先想用vba来拆,但是现学vba时间来不及了,个人比较熟悉php。上面朋友说直接匹配\d+克然后替换成空字符串,我提取品名时就是这样做的;现在我的思路是反向匹配品名然后替换成空字符串,就得到规格了,折腾不出来。不知道有没有好的办法能把两个分开。汗,转成excel问题了。。。已经用vba+正则解决了,话说vba的语法还是挺简单的,因为熟悉PHP,所以采纳了用PHP的朋友的答案,谢谢各位的耐心回答!
2 回答
qq_花开花谢_0
TA贡献1835条经验 获得超7个赞
以php代码为例:$arr=[];$arr[]='佳洁士强根固齿牙膏90克';$arr[]='佳洁士强根固齿牙膏140克';$arr[]='佳洁士草本水晶牙膏(清爽薄荷香型)105克';foreach($arras$str){preg_match('/([^0-9]+)\d+克/',$str,$match);var_dump($match);}输出结果为:array(2){[0]=>string(32)"佳洁士强根固齿牙膏90克"[1]=>string(27)"佳洁士强根固齿牙膏"}array(2){[0]=>string(33)"佳洁士强根固齿牙膏140克"[1]=>string(27)"佳洁士强根固齿牙膏"}array(2){[0]=>string(53)"佳洁士草本水晶牙膏(清爽薄荷香型)105克"[1]=>string(47)"佳洁士草本水晶牙膏(清爽薄荷香型)"}是不是你要的?
手掌心
TA贡献1942条经验 获得超3个赞
stringinput="佳洁士强根固齿牙膏90克";Regexreg=newRegex(@"(?\d+)克"); Console.WriteLine(reg.Match(input).Groups["val"].Value);//output90;你要什么编程语言的?上面的眼瞎了,不好意思。stringinput="佳洁士强根固齿牙膏90克";Regexreg=newRegex(@"(\d+克$)");Console.WriteLine(reg.Replace(input,""));//output:佳洁士强根固齿牙膏
添加回答
举报
0/150
提交
取消