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

R提取文本直到,不包括x,r,regex,R,Regex,我有一堆长度不一的弦,但都嵌入了一年。我试图只提取文本部分,这就是数字开始之前的所有内容,我对lookeahead断言有问题,假设这是正确的提取方式 以下是我拥有的(未返回匹配项): >grep(\\b.(?=\\d{4})”,“foo_1234_-bar”,perl=T,value=T) 在本例中,我希望只提取foo,但在年份部分之前,可能有几个长度混合的,由\uu分隔。这将获取所有内容,直到第一个数字 x <- c("asdfas_1987asdf", "asd_das_12") re

我有一堆长度不一的弦,但都嵌入了一年。我试图只提取文本部分,这就是数字开始之前的所有内容,我对lookeahead断言有问题,假设这是正确的提取方式

以下是我拥有的(未返回匹配项):

>grep(\\b.(?=\\d{4})”,“foo_1234_-bar”,perl=T,value=T)


在本例中,我希望只提取
foo
,但在年份部分之前,可能有几个长度混合的,由
\uu
分隔。

这将获取所有内容,直到第一个数字

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

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

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

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

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

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

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

/(.+?)_\d{4}/ 
-第一个匹配组($1)包含“foo”

另一种方法(我经常发现strsplit比regex搜索更快,但并不总是如此(尽管这确实使用了一点regexing):

x另一种方法(我经常发现strsplit比regex搜索更快,但并不总是如此(尽管这确实使用了一点regexing):


x我不能责怪你偷了我的例子——我花了很长时间思考如何完美地组合拼凑起来的钥匙来制作这个例子。我因为偷窃而受到惩罚,因为没有人欣赏
strsplit
答案,这也是我最好的作品之一:)现在是星期天晚上,我很无聊,所以我可能会把这3个例子放在板凳上,为我的答案争取支持。尽管我可能甚至没有动力这么做。我有点担心字符类括号中有“+”(实际上,现在我已经测试过了,我更担心。)应该是strsplit(x,[0-9]+)@DWin修正了它更好吗?我通常会玩regex,直到我让它做我想做的事情,或者去阅读手册,完成任务,然后很快忘记下一次该怎么做:(我不能因为你偷了我的例子而责怪你——我花了很长时间思考如何将拼凑在一起的钥匙完美地结合在一起制作这个例子。我因为偷窃而受到惩罚,因为没有人欣赏
strsplit
答案,这也是我最好的作品之一:)现在是星期天晚上,我很无聊,所以我可能会把这3个例子放在板凳上,为我的答案争取支持。尽管我可能甚至没有动力这么做。我有点担心字符类括号中有“+”(实际上,现在我已经测试过了,我更担心。)应该是strsplit(x,[0-9]+)@DWin修正了它更好吗?我通常会玩regex,直到我让它做我想做的事情,或者去阅读手册,完成任务,然后很快忘记下一次该怎么做:(