只提取与R

时间:2016-08-12 17:31:20

标签: regex r split truncation

我构建了一个自动从网页中报废的数据框,其中一个变量是文本形式为“5月12日”的日期。

尽管如此,有时会在日期之后附上一些字符(在某些情况下是奇怪的字符),例如:“May20õ”,“Dez 1”,“Oct12ABCdáé”。 对于这些情况,我想用正确的字符替换值,因此:“Dec 24”,“Oct 1”。

谷歌搜索多次解决方案并尝试以下函数:sub,gsub和grep之后,我找不到找到正确函数的方法。

我看到正则表达式有一个陡峭的学习曲线,但在使用工具http://regexr.com/后,我可以定义正则表达式以匹配问题出现的观察中的模式。的([A-Z] {1} [A-Z] {2})\ S \ d + *

此时,我有以下示例:

vector = c("May 20", "Dez 1", "Oct 12ABCdáé”)

我尝试的最后一个解决方案是:

dateformat = gsub(pattern = "([A-Z]{1}[a-z]{2})\\s\\d+.*", replacement = "([A-Z]{1}[a-z]{2})\\s\\d+", x = vector)

但是当然这给了我一个替换文本字符串“([A-Z] {1} [a-z] {2})\ s \ d +”每个。

> dateformat
[1] "([A-Z]{1}[a-z]{2})sd+" "([A-Z]{1}[a-z]{2})sd+"
[3] "([A-Z]{1}[a-z]{2})sd+"

我真的不明白我必须包含在替换参数中以删除坏字符(如果它们存在)。

2 个答案:

答案 0 :(得分:1)

我添加了一个捕获组和一个反向引用"\\1"

sub("^([A-Z]{1}[a-z]{2}\\s\\d+).*", "\\1", vector)
[1] "May 20" "Dez 1"  "Oct 12"

replace参数接受像'\\1'这样的反向引用,但不是您使用的典型正则表达式模式。反向引用返回您创建的模式和您定义的捕获组。在这种情况下,我们的捕获组是我们用parantheticals (..)概述的缩写月份和日期。 <{1}}放置在替换参数中时,将返回在这些括号内捕获的任何文本。

quick-start guide可能会有所帮助

答案 1 :(得分:0)

我们也可以尝试

modelLosses = kfoldLoss(Mdl,'mode','individual');