Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/73.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 使用R中的正则表达式从字符串中解析价格_Regex_R - Fatal编程技术网

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")

注:有偏见的向上投票开启:-注:有偏见的向上投票开启:-