grep浮点百分比符号R

时间:2016-03-19 21:51:00

标签: regex r

我有长字符串,包含各种文本和数字数据,如

a <- "$3,295,000; 8 Units; 4.08% Cap Rate; 9,360 SF Bldg;"

我希望能够提取百分比,在本例中为4.08%

如何将此模式与grep()匹配?

3 个答案:

答案 0 :(得分:3)

您可以在sub中使用非贪婪匹配:

sub('.*?([0-9.]+%).*', '\\1', a)
[1] "4.08%"

这只会匹配字符串中第一个模式实例。

.*?非贪婪,所以它不会su&#34;吮吸&#34;以下模式中的字符符合您的要求。

答案 1 :(得分:1)

我们可以使用str_extract

library(stringr)
str_extract_all(a, "[0-9.]+%")[[1]]
#[1] "4.08%"

如果我们只需要匹配第一个实例,请使用str_extract代替str_extract_all。虽然另一个答案也做了同样的事情,但最好将str_extract_all用于多个案例。

grep用于返回字符串的索引,无论它是否具有特定模式。假设我们使用grep,它会将索引返回为1(因为vector中只有一个元素并且它与模式匹配)

grep("[0-9.]+$", a)
#[1] 1

为了提取子字符串,可以使用str_extractgsub(来自base R

答案 2 :(得分:1)

您应该使用的模式是(?:[0-9]{1,2}(?:\.[0-9]{1,2})?%)

匹配Upto 2 digits . Upto 2 digits %

Regex101 Demo