我有一个字符串,其中包含以下形式的账单:
bills <- c("2940 Green apples 250g", "5435 Bananas 0,5kg", "3425 Milk")
我想提取产品的重量,我这样做了:
gsub(".*\\s(\\d*,*\\d+)\\s*(g|kg)$", "\\1", bills)
"250" "0,5" "3425 Milk"
这种方法是有效的,因为它正确地返回了前两个条目的250和0,5,但是为什么它返回了整个第三个条目“3425 Milk”?我想通过使用"\\1"
我会告诉gsub
提取第一个匹配组,这里是(\\d*,*\\d+)
。因此,我希望最后一个条目是NA
或空字符串。因此这是我的预期输出:
expected <- c("250", "0,5", NA) # OR
expected <- c("250", "0,5", "")
2条答案
按热度按时间8ehkhllq1#
您可以添加更改以捕获所有内容。
如果你的替换字符串没有引入新的符号(只是捕获的组的重组,例如
\\1
或\\1\\3\\2
),这将导致用空字符串替换输入字符串:另外,我会将
,*
更改为,?
,因为我不相信您的输入将是有效的,如果它包含类似1,,,5g
的内容wd2eg0qa2#
使用 stringr,我会保留“g”和“kg”,因为当删除这些数字时,它们处于不同的刻度。