我正在使用一个数据集,其中有一列描述不同的产品。在产品描述中也是产品的重量,这是我想要提取的。我的问题是,一些产品有双 Package ,这意味着描述以“2x”开头,而实际重量在描述的末尾。例如:
x = '2x pet food brand 12kg'
我想做的是把它缩短到2x 12 kg。我不太擅长在R中使用regexp,希望这里有人能帮助我。
我尝试用gregexp来实现这一点:
m <- gregexpr("(^[0-9]+x [0-9]+kg)", x)
不幸的是,这只给了我“10公斤”,不包括“2x”
我会很感激任何帮助。
编辑--
在整理了我最初的问题之后,我发现在不同格式的数据中有几个示例,我也喜欢提取:
x = 'Pet food brand 15x85g'
# Should be:
x = '15x85g'
我试着在gsub中使用OR语句,比如:
m <- gsub('^([0-9]+x)?[^0-9]*([0-9.]+kg)|([0-9]+x)?[^0-9]*([0-9.]+g)', '\\1\\2', x)
#And
m <- gsub('^([0-9]+x)?[^0-9]*([0-9.]+(kg|g)), x)
虽然这仍然提取了公斤,但它只删除了带有克的示例,并保留了字符串的其余部分,如:
x = 'Pet food brand '
或者使用以下命令再次运行gsub:
m <- gsub('([0-9]+x[0-9]+g)', '\\1', x)
后一个选项根本不提取产品重量,而只是保持字符串不变。
很抱歉没有注意到字符串的格式不同。再次,任何帮助都将不胜感激。
2条答案
按热度按时间58wvjzkj1#
您可以使用此正则表达式
对于
string = "2x pet food brand 12kg"
,得到"2x12kg"
如果千克有小数,这也有效:
对于
string = "23x pet food 23.5Kg"
,得到"23x23.5Kg"
sbtkgmzw2#
(编辑以纠正@R. Schifini指出的错误)
你可以像这样使用正则表达式:
即使字符串的开头没有“2x”,这也会得到权重: