R 之间的匹配字符串;及%

R 之间的匹配字符串;及%,r,regex,R,Regex,我希望提取字符串中不带%符号的十进制值。所以在这种情况下,我想要数值0.45 x <- "document.write(GIC_annual[\"12-17 MTH\"][\"99999.99\"]);0.450%" str_extract(x, "^;[0-9.]") x由于您不希望在输出中使用分号,请将其用作lookback regex stringr::str_extract(x, "(?&l

我希望提取字符串中不带%符号的十进制值。所以在这种情况下,我想要数值0.45

x <- "document.write(GIC_annual[\"12-17 MTH\"][\"99999.99\"]);0.450%"
str_extract(x, "^;[0-9.]")

x由于您不希望在输出中使用分号,请将其用作lookback regex

stringr::str_extract(x, "(?<=;)[0-9]\\.[0-9]+")
#[1] "0.450"

您还可以选择以下选项:

stringr::str_extract(y, "\\d\\.\\d{1,}(?=%)")
[1] "0.450"
因此,基本上,您可以向前看,检查是否有
%
,如果有,则捕获前面的数字

详细信息

\\d
数字

\\.
dot

\\d
数字

{1,}
之后捕获一个或多个数字


(?=%)
向前看,检查是否有
%
,如果有,它将重新运行捕获的数字

,以便搜索%符号-(?=%)。如果它找到一个,那么它会在%符号之前查找一个数字,后跟一个十进制数,然后再查找任意数量的数字。是吗?没错,如果(?=%)是真的,那么它会返回并找到您想要的模式
stringr::str_extract(y, "\\d\\.\\d{1,}(?=%)")
[1] "0.450"