Regex 使用R中的正则表达式从字符串中解析价格
我的数据如下所示:Regex 使用R中的正则表达式从字符串中解析价格,regex,r,Regex,R,我的数据如下所示: L/S Price $555,000Previous Price: $575,000 $865,000Previous Price: $875,000 $995,000 $1,325,000Previous Price: $1,459,000 library(stringr) df <- c('$555,000Previous Price: $575,000', '$865,000Previous Price: $875,000', '$995,000', '$1,
L/S Price
$555,000Previous Price: $575,000
$865,000Previous Price: $875,000
$995,000
$1,325,000Previous Price: $1,459,000
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,]*')))
我想要的结果是:
555000
865000
995000
1325000
我能想到的最好的正则表达式是[0-9,]+,但这有几个问题,比如与之前的价格匹配,这只是噪音。我在正则表达式中包含了逗号,这样我就可以匹配整个价格,尽管我最终需要删除逗号
或者,我想我可以用[a-zA-Z]之类的东西来选择我不想要的部分。然后将其删除,尽管我在实现这一点上遇到了困难
这是一个dput:
我们可以使用捕获组。。。从字符串中捕获数字元素,然后将其替换为所捕获组的反向引用
as.numeric(gsub("^\\D*([0-9]+),*([0-9]+),([0-9]+).*", "\\1\\2\\3", str1))
#[1] 555000 865000 995000 1325000
或者只需匹配非数字字符并替换为
我们可以使用捕获组。。。从字符串中捕获数字元素,然后将其替换为所捕获组的反向引用
as.numeric(gsub("^\\D*([0-9]+),*([0-9]+),([0-9]+).*", "\\1\\2\\3", str1))
#[1] 555000 865000 995000 1325000
或者只需匹配非数字字符并替换为
使用库stringr,可以执行以下操作:
L/S Price
$555,000Previous Price: $575,000
$865,000Previous Price: $875,000
$995,000
$1,325,000Previous Price: $1,459,000
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,]*')))
使用库stringr,可以执行以下操作:
L/S Price
$555,000Previous Price: $575,000
$865,000Previous Price: $875,000
$995,000
$1,325,000Previous Price: $1,459,000
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以外的其他字母,则将p替换为[:alpha:]
注意:我们使用了以下输入:
s <- c("$555,000Previous Price: $575,000", "$865,000Previous Price: $875,000",
"$995,000 ", "$1,325,000Previous Price: $1,459,000")
这似乎很简单,不涉及任何包。它删除P和其后的所有内容,然后从剩下的内容中删除所有非数字。最后,它将其转换为数字
as.numeric(gsub("\\D", "", sub("P.*", "", s)))
## [1] 555000 865000 995000 1325000
如果最后一个数字后面可能跟有p以外的其他字母,则将p替换为[:alpha:]
注意:我们使用了以下输入:
s <- c("$555,000Previous Price: $575,000", "$865,000Previous Price: $875,000",
"$995,000 ", "$1,325,000Previous Price: $1,459,000")
注:有偏见的向上投票开启:-注:有偏见的向上投票开启:-