正则表达式“直到但不包括”特殊字符(使用R)

时间:2013-11-21 17:11:41

标签: regex r

我有一个像这样的数据框(RNA.patients):

PAK1|5808
PAK2|10289
PALM2|114299
PALM2-AKAP2|445815

我想抓住所有东西直到“|”,所以我找到了这个正则表达式:

regmatches(RNA.patients[i,1], regexpr("^[^[:punct:]]*", RNA.patients[i,1]))

但对于像“PALM2-AKAP2”这样的情况,正则表达式停在“ - ”处。 请有人帮帮我吗?

3 个答案:

答案 0 :(得分:5)

不要乱用正则表达式(除非它们确实是必要的),只需在列上使用read.table将其拆分为两个,然后从中提取相关列:

Text <- c("PAK1|5808", "PAK2|10289", "PALM2|114299", "PALM2-AKAP2|445815")
read.table(text = Text, sep = "|")
#            V1     V2
# 1        PAK1   5808
# 2        PAK2  10289
# 3       PALM2 114299
# 4 PALM2-AKAP2 445815

或者,您可以使用strsplit

sapply(strsplit(Text, "[|]"), `[[`, 1)
# [1] "PAK1"        "PAK2"        "PALM2"       "PALM2-AKAP2"
sapply(strsplit(Text, "[|]"), `[[`, 2)
# [1] "5808"   "10289"  "114299" "445815"

答案 1 :(得分:3)

我猜你可以将否定转移到punct子类中,然后添加 - 到外部类

^[-[:^punct:]]*

如果您想全局匹配字段,请使用此

[-[:^punct:]]+

答案 2 :(得分:3)

使用comment by @nograpes,您可以使用正则表达式结合sub来消除管道中的所有字符。

sub("\\|.*$","",RNA.patients[[1]])