我有一个像这样的数据框(RNA.patients):
PAK1|5808
PAK2|10289
PALM2|114299
PALM2-AKAP2|445815
我想抓住所有东西直到“|”,所以我找到了这个正则表达式:
regmatches(RNA.patients[i,1], regexpr("^[^[:punct:]]*", RNA.patients[i,1]))
但对于像“PALM2-AKAP2”这样的情况,正则表达式停在“ - ”处。 请有人帮帮我吗?
答案 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]])