2015-10-02 29 views
0

我正在处理数据的结构是为了多个目的而使用单个字段。我有超过1万条记录要处理,并且我需要将具有意义的特定系列字符提取到我的dataFrame中的不同字段中。我需要从中提取出可预测的模式;下面是一个例子:从非结构化文本中提取字符串值

x = "This field has lots of text and also what I need to extract from it which is 555_AB345678" 

我需要提取的是555_AB345678值。前三个值(555)和下划线都是可预测的; AB345678不是。但是,至少字符串的最后4个值始终是数字。我不能保证我想要的值是在字符串的末尾,但在大多数情况下,他们是我会很满意从那里开始的。

我已经探索使用gregxpr()substring(),但还没有得到它的工作。我在想strsplit()可以工作,但是我没有一个可预测的分隔符来分割(我需要的值只是一个可预测的模式)。我也发现了类似的问题,但没有一个看起来符合我的标准。

extract a substring in R according to a pattern

我想看看是否有人在这里有关于如何可以这样做的建议。

+1

这个例子感谢弗兰克伟大的工作!我会用我的其余数据给我一个镜头。如果你真的那么友善,你能否在这个答案中解释你在用这个函数做什么?我肯定会接受它! – Sevyns

+0

@Frank你应该发布答案 –

回答

1

的基础R的方法是用该卷积提取:

regmatches(x, regexpr("555_.*$", x)) 
# "555_AB345678" 

$是对字符串的末尾;和.*,任何字符序列(包括一个空字符)。


或者,我们可以只需要部分更换整个字符串:

sub("^.*(555_.*)$", "\\1", x) 
# "555_AB345678" 

^是字符串的开始,所以我们现在整个字符串匹配,从^$\\1替换是指括号内的部分。有关详细信息,请参阅?regex。对于语法较好的提取器,您可以尝试使用stringr软件包:

library(stringr) 
str_extract(x, "555_.*$") 
# "555_AB345678"