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

Regular expression to separate string containing upper and lower case

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

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) Genename 后跟一个包含 UPPERCASElowerlase 的单词(因此将这部分与之前的部分分开)。
2) GenenameDNA(将 "DNA" 与之前的部分分开。
3)基因名“”(空space)
4) 基因名T-B-.
5) 基因名FHL。

实际上最棘手的是 UPPERCASe 小写部分,其他我会尝试解决,post 在这里。
非常感谢你的帮助! 塞巴斯蒂安

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

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)

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

假设你的例子代表了所有的可能性,你所拥有的是:

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

所以一个解决方案是:提取每个字符串中的第一个单词,然后识别附加单词的情况(一个大写后一个小写)并删除它们。要继续使用包 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" 

我很确定这可以在一行中完成。尽量让你的问题更清楚,可能有人会提出一些花哨的正则表达式来完成工作。