R提取文本直到,不包括x

时间:2012-09-17 02:13:04

标签: regex r grep

我有一堆混合长度的字符串,但都嵌入了一年。我试图只提取文本部分,即所有内容,直到数字开始,并且我对lookeahead断言有问题,假设这是这种提取的正确方法。

这是我所拥有的(返回不匹配):

>grep("\\b.(?=\\d{4})","foo_1234_bar",perl=T,value=T)

在示例中,我希望仅提取foo,但可能有几个,并且混合长度在年份之前由_分隔。

3 个答案:

答案 0 :(得分:5)

在这里预测可能有点过头了。使用下划线和4位数字作为结构,结合非贪婪的量词,以防止'点'吞噬一切:

/(.+?)_\d{4}/ 

- 第一个匹配组($ 1)持有'foo'

答案 1 :(得分:3)

这将抓住所有内容,直到第一个数字

x <- c("asdfas_1987asdf", "asd_das_12")
regmatches(x, regexpr("^[^[:digit:]]*", x))
#[1] "asdfas_"  "asd_das_"

答案 2 :(得分:2)

另一种方法(通常我发现strsplit比正则表达式搜索更快但并不总是(虽然这确实使用了一点点的再生):

x <- c("asdfas_1987asdf", "asd_das_12") #shamelessly stealing Dason's example
sapply(strsplit(x, "[0-9]+"), "[[", 1)