解析价格出来的字符串与R中的正则表达式的
问题描述:
我的数据是这样的:解析价格出来的字符串与R中的正则表达式的
L/S Price
$555,000Previous Price: $575,000
$865,000Previous Price: $875,000
$995,000
$1,325,000Previous Price: $1,459,000
我想结果是这样的:
555000
865000
995000
1325000
我能想出是最好的正则表达式([0-9,])+
但这有几个问题,例如也匹配只是噪音的“以前的价格”。我在我的正则表达式中加入了逗号,这样我就可以匹配整个价格,即使我最终需要删除逗号。
或者,我想我可以选择我不想要的部分,如([a-zA-Z]).+
之类的东西,然后将其删除,尽管我在执行此操作时遇到了问题。
这里有一个dput
:
> dput(mls_res$`L/S Price`[1:4])
c("$555,000Previous Price: $575,000", "$865,000Previous Price: $875,000",
"$995,000 ", "$1,325,000Previous Price: $1,459,000")
答
我们既可以使用捕捉组((...)
)来捕获从字符串的数字元素,然后与拍摄组的逆向引用替换
as.numeric(gsub("^\\D*([0-9]+),*([0-9]+),([0-9]+).*", "\\1\\2\\3", str1))
#[1] 555000 865000 995000 1325000
或者只是匹配非数字字符并将其替换为""
。
as.numeric(gsub("[$,]|[[:alpha:]]+.*", "", str1))
#[1] 555000 865000 995000 1325000
答
随着库stringr
,你可以做这样的事情:
library(stringr)
df <- c('$555,000Previous Price: $575,000', '$865,000Previous Price: $875,000', '$995,000', '$1,325,000Previous Price: $1,459,000')
as.numeric(gsub('\\$|,', '', str_extract(df, '^\\$[0-9,]*')))
答
这似乎很简单,不涉及包。它删除P和其后的所有内容,然后删除剩下的所有非数字。最后它将其转换为数字。
as.numeric(gsub("\\D", "", sub("P.*", "", s)))
## [1] 555000 865000 995000 1325000
如果最后一位数字后面跟着一些其他字母,那么用P代替[[:alpha:]]
。
注:我们用这个输入:
s <- c("$555,000Previous Price: $575,000", "$865,000Previous Price: $875,000",
"$995,000 ", "$1,325,000Previous Price: $1,459,000")
@哈克-R我一些解释更新。 – akrun
注意:有偏见的upvoting在:-) – akrun