R-使用gregexpr从字符串中提取多个模式
我正在使用一个数据集,其中有一列描述不同的产品。在产品描述中还有产品的重量,这是我想提取的。我的问题是有些产品是双包装的,这意味着描述以“2x”开头,而实际重量在描述的末尾。例如:R-使用gregexpr从字符串中提取多个模式,r,regex,R,Regex,我正在使用一个数据集,其中有一列描述不同的产品。在产品描述中还有产品的重量,这是我想提取的。我的问题是有些产品是双包装的,这意味着描述以“2x”开头,而实际重量在描述的末尾。例如: x = '2x pet food brand 12kg' 我想做的是把它缩短到2x12kg。 我不擅长在R中使用regexp,希望这里的人能帮助我 我已尝试通过以下方式使用gregexp进行此操作: m <- gregexpr("(^[0-9]+x [0-9]+kg)", x) 我曾尝试在gsub中使用或声
x = '2x pet food brand 12kg'
我想做的是把它缩短到2x12kg。
我不擅长在R中使用regexp,希望这里的人能帮助我
我已尝试通过以下方式使用gregexp进行此操作:
m <- gregexpr("(^[0-9]+x [0-9]+kg)", x)
我曾尝试在gsub中使用或声明,例如:
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)
或使用以下命令再次运行gsub:
m <- gsub('([0-9]+x[0-9]+g)', '\\1', x)
后一个选项根本不提取产品权重,只保留字符串不变
很抱歉,没有注意到前面的字符串格式不同。再次感谢您的帮助。编辑以更正@R.Schifini指出的错误 您可以像这样使用正则表达式:
x <- '2x pet food brand 12kg'
gsub('^([0-9]+x)?[^0-9]*([0-9]+kg)', '\\1\\2', x)
## "2x12kg"
即使字符串的开头没有2x,这也会得到重量:
x <- 'pet food brand 12kg'
gsub('^([0-9]+x)?[^0-9]*([0-9]+kg)', '\\1\\2', x)
## "12kg"
可以使用这个正则表达式
m = gregexpr("([0-9]+x|[0-9.]+kg)", string, ignore.case = T)
result = regmatches(string, m)
r = paste0(unlist(result),collapse = "")
对于string=2x宠物食品品牌12kg,您将获得2x12kg
如果千克有小数,这也适用:
对于string=23x宠物食品23.5Kg,您会得到23x23.5Kg将模式更改为:“^[0-9]+x”[^0-9]*[0-9]+kg”,因为它会删除除kg中最后一位以外的所有数字。您是对的!我不知道我怎么会错过。我编辑了我的答案。谢谢
x <- 'pet food brand 12kg'
gsub('^([0-9]+x)?[^0-9]*([0-9]+kg)', '\\1\\2', x)
## "12kg"
m = gregexpr("([0-9]+x|[0-9.]+kg)", string, ignore.case = T)
result = regmatches(string, m)
r = paste0(unlist(result),collapse = "")