在 R 中提取最后一个数字及其后面的文本

3

从像这样的字符串中

s <- c("123 John 80 kg", "456 Paul 23 shifts  9 l", "Diane 155 cm")

我希望提取最后一个数字和后面的文本。我的期望结果如下:
"80 kg" "9 l" "155 cm"
4个回答

5

尝试以下正则表达式,其读起来就像要求:

stringr::str_extract(s, "\\d+\\D*$")

4

你可以使用正则表达式实现这个功能:

sub(".*\\b(\\d+\\s+\\w+)", "\\1", s)
1] "80 kg"  "9 l"    "155 cm"

谢谢!你的答案对我给出的例子有效。对于可能有类似情况的人来说,这个解决方案并不适用于像“678 Oscar 60kg”这样的情况。Ronak使用stringi的解决方案可以解决这个问题。 - Nikolay Nenov
1
如果您想要数字和字母之间不允许有空格,请使用“.\b(\d+\s\w+)”。 - G5W
1
@NikolayNenov,这就是为什么在你提出问题时,包含需要调整的情况非常有帮助,这样人们就可以解决这些限制而无需返回和修正。如果你的例子中没有60kg的案例,我们就不知道你需要一个。 - camille
谢谢@camille - 提醒需要给那些不明显的人提供相关示例非常有用。请注意,我的初始评论旨在告知可能遇到类似问题的任何人,解决方案可能不适用于他们的情况。如果它听起来像是批评,我很抱歉;) - Nikolay Nenov

1
使用 stri_extract_last_regex
stringi::stri_extract_last_regex(s, "\\d+\\s+\\w+")
#[1] "80 kg"  "9 l"    "155 cm"

1
或者使用基础 R 中的 regmatches/regexpr。保留 HTML,不进行解释。
regmatches(s, regexpr("\\d+[^0-9]*$", s))
#[1] "80 kg"  "9 l"    "155 cm"

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接