您可以捕获0 个或多个非数字之后的数字。The
str_match function differs from the
str_extract` 在这方面,它保留了所有捕获组的值。
> sa<-"100 dollars for 200 pesos"
> str_match_all(sa,"dollars\\D*(\\d+)")
[[1]]
[,1] [,2]
[1,] "dollars for 200" "200"
只需使用第二列中的值。
图案细节
dollars
- 匹配一个dollars
子字符串
\\D*
- 除数字以外的零个或多个字符(它也匹配空格)
(\\d+)
- 第 1 组:一位或多位数字。
要提取200
值,您可以使用regmatches/regexpr
:
sa<-c("100 dollars for 200 pesos", "100 dollars 200 pesos")
regmatches(sa, regexpr("dollars\\D*\\K\\d+", sa, perl=TRUE))
## => [1] "200" "200"
请参阅R 演示。
细节
dollars
- 一个子串
\\D*
- 除数字外的任何 0+ 个字符
\\K
- 匹配重置运算符
\\d+
- 1 个或多个数字。
.*
可以使用带有 as 前缀/后缀的相同模式sub
(不需要 a,gsub
因为我们只需要一个搜索和替换操作:
sa<-c("100 dollars for 200 pesos", "100 dollars 200 pesos")
sub(".*dollars\\D*(\\d+).*", "\\1", sa)
## => [1] "200" "200"
再看一个演示