我正在处理数据,其结构是将单个字段用于多种用途。我有超过1万条记录需要处理,我需要在dataFrame的不同字段中提取具有意义的特定系列字符。我需要从中提取出一种可预测的模式;下面是一个例子:
x = "This field has lots of text and also what I need to extract from it which is 555_AB345678"
我需要提取的是555_AB345678值。前3个值(555)和下划线都是可预测的; AB345678不是。但是,至少字符串的最后4个值始终为数字。我不能保证我想要的值是在字符串的末尾,但在大多数情况下它们是如此,我会满意从那里开始。
我已经探索过将gregexpr()与substring()一起使用,但尚未使用它。我在想strsplit()可以工作,但我没有可分割的分隔符(只是我需要的值中的可预测模式)。我也发现了类似的问题,但似乎没有一个符合我的标准。
extract a substring in R according to a pattern
我想看看这里是否有人就如何做到这一点提出建议。
答案 0 :(得分: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"
答案 1 :(得分:0)
你有一个模式!
threeLeadingValues-underscore-something-threeDigits 就足以构成这个表达式:
/.{3}_.*\d{3}/