为了账号安全,请及时绑定邮箱和手机立即绑定

请教一个正则表达式问题

请教一个正则表达式问题

慕慕森 2019-04-07 11:19:09
厂家提供的货品明细表,类似于下面这种格式:佳洁士强根固齿牙膏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)"佳洁士草本水晶牙膏(清爽薄荷香型)"
}
是不是你要的?
                            
查看完整回答
反对 回复 2019-04-07
?
手掌心

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:佳洁士强根固齿牙膏
                            
查看完整回答
反对 回复 2019-04-07
  • 2 回答
  • 0 关注
  • 291 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信