Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/79.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_Date_Pattern Matching_Substring - Fatal编程技术网

Regex 从R中的字符串中提取具有点子字符串的图案

Regex 从R中的字符串中提取具有点子字符串的图案,regex,r,date,pattern-matching,substring,Regex,R,Date,Pattern Matching,Substring,我有一组像这样的角色 data <- c("ABS Spring Meeting 5.14.15", "DEFG Sellors Tour 10.28.14", "DDCC Fun at the Museum 4.4.15", "GAME CS vs. Washington 11.01.14", "BSS Studio 54 5.13.15","Pas-12 3.5.15") data最快的方法是使用lubridate。如果您提供通用格式,它将尝试为您找出: library(lubrid

我有一组像这样的角色

data <- c("ABS Spring Meeting 5.14.15", "DEFG Sellors Tour 10.28.14", "DDCC Fun at the Museum 4.4.15", "GAME CS vs. Washington 11.01.14", "BSS Studio 54 5.13.15","Pas-12 3.5.15")

data最快的方法是使用
lubridate
。如果您提供通用格式,它将尝试为您找出:

library(lubridate)
mdy(data)
[1] "2015-05-14 UTC" "2014-10-28 UTC" "2015-04-04 UTC" "2014-11-01 UTC"
如果您的数据与其他数字变得更加复杂,您可以使用字符串提取方法。像这样:

mdy(sub(".*?([0-9.]+)$","\\1", data))
在模式
“*?([0-9.]+)$”中

  • *?
    匹配所有字符和空格。问号允许模式的下一部分完全匹配

  • ([0-9.]+)$
    搜索到达以美元符号标记的字符串末尾的最长数字和小数点。偏执狂在其中创建了一组标记。下一步我们将使用该组

  • “\\1”
    从模式中返回捕获组,并丢弃剩余的匹配项

有许多网站将比我更深入地研究正则表达式。因为它几乎在每一种编程语言中都使用,所以花至少几个小时研究它是值得的

通过这本免费的Perl在线书籍,我学到了很多东西。在这里查看第5章:

本网站有一个小节,重点介绍R


数据以R为基数,如果日期始终位于字符串末尾,则可以使用

as.Date(sub(".*\\s", "", data), "%m.%d.%y")
# [1] "2015-05-14" "2014-10-28" "2015-04-04" "2014-11-01"
这里,正则表达式是简单的

  • *
    一切
  • \\s
    空格字符

因此,这将删除包括最后一个空格字符在内的所有内容。

很酷,而且有点令人担忧的是,
mdy()
只是忽略了所有无关的字眼……lubridate只对我的数据库部分起作用。我的整个表格包含大约300个名称,名称中还包含一些其他数字,例如“BSS Studio 54 5.13.15”,那么它不适用于此。添加了提取方法。非常感谢,它非常完美。但还有一个小问题,“\\1”是什么意思?它用整个匹配替换了偏执论中的部分。我将补充更多的答案。其他字符,如“BSS Studio 54 5.13.15”,“Pas-12 3.5.15”非常感谢,但你能解释一下“[0-9]+(\\\.[0-9]+){2}$”吗?我正在学习。
data <- data <- c("ABS Spring Meeting 5.14.15", 
   "DEFG Sellors Tour 10.28.14", "DDCC Fun at the Museum 4.4.15", 
    "GAME CS vs. Washington 11.01.14", "BSS Studio 54 5.13.15",
    "Pas-12 3.5.15")
library("lubridate")
library("stringr")

mdy(str_extract(data,"[0-9]+(\\.[0-9]+){2}$"))
## [1] "2015-05-14 UTC" "2014-10-28 UTC" "2015-04-04 UTC" "2014-11-01 UTC"
## [5] "2015-05-13 UTC" "2015-03-05 UTC"
as.Date(sub(".*\\s", "", data), "%m.%d.%y")
# [1] "2015-05-14" "2014-10-28" "2015-04-04" "2014-11-01"