正则表达式以分隔包含大写和小写字母的字符串

时间:2018-09-20 13:42:50

标签: r regex strsplit

我无法执行正则表达式任务,如果有人可以提供帮助,那就太好了。 我需要将基因名称与附加的描述分开。使用在99%的案例中出现的术语涉及将其与“ GeneCards Summary”分开,可以使用tidyverse通过gene <- str_split (DF$Gene, "GeneCards Summary", simplify = TRUE)来解决。但是现在有些不遵循这种模式的示例如下:

example <- c("STAT1Predisposition to Mucocutaneous Candidiasis", 
             "PMS2DNA Repair DefectsPMS2 Deficiency", 
             "FANCACombined ImmunodeficiencyFANCA", 
             "HAX1 This gene", "ELANE ELANE is a gene", 
             "IL1RNNon-Inflammasome Related", "PRKDCT-B- SCIDDNA PKcs",
             "MSH6Severe Reduction", "AP3B1FHL Syndromes")

我能够找出以下模式,希望可以涵盖所有模式(不太可能,但是如果您的解决方案出现,我也应该把其余的模式也包括在内):

1)基因名后跟一个包含UPPERCASElowerlase的单词(因此,将这一部分与之前的部分分开)。
2)基因名称DNA(之前部分中的单独“ DNA”。
3)genename“”(空白)
4)基因名T-B-。
5)基因名FHL。

实际上,最棘手的是UPPERCASe小写字母部分,其余的我将尝试解决并在此处发布。
非常感谢你的帮助! 塞巴斯蒂安

这是我的解决方案的一部分,没有上/下一个:

clean_1 <- str_split(example, "DNA", simplify = T)
clean_2 <- str_split(clean_1, "[[:blank:]]", simplify = T)
clean_3 <- str_split(clean_2, "T-B", simplify = T)
clean_4 <- str_split(clean_3, "FHL", simplify = T)

我会每轮都这样做以清理数据,但是可能有更好的方法。

1 个答案:

答案 0 :(得分:1)

假设您的示例代表了所有可能性,那么您拥有的是:

  • 基因名称始终在字符串的开头
  • 它总是大写,有时带有数字(也许是标点符号?)
  • 在某些情况下,基因名称与下一个句子合并时,总是以大写字母开头,然后是小写字母。

一个解决方案是:提取每个字符串中的第一个单词,然后确定附加单词的情况(一个大写字母,然后是小写字母)并删除它们。要继续使用package stringr:

library(stringr)

# Extract any characters before the first space:
fWord <- str_extract(example, '([^[:blank:]]+)')

# Find the index of strings that have lower cases:
ind <- grep('[:lower:]', fWord)

# Select everything until the first lower caseand remove the last character:
fWord[ind] <- str_sub(str_extract(fWord[ind], '([^[:lower:]]+)' ), end = -2)

> fWord
[1] "STAT1"     "PMS2DNA"   "FANCA"     "HAX1"      "ELANE"     "IL1RN"    
[7] "PRKDCT-B-" "MSH6"      "AP3B1FHL" 

我很确定这可以一行完成。尝试使您的问题更清楚,可能有人会提出一些花哨的正则表达式来完成任务。