正则表达式分隔包含大小写的字符串
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"
我很确定这可以在一行中完成。尽量让你的问题更清楚,可能有人会提出一些花哨的正则表达式来完成工作。
我无法执行正则表达式任务,如果有人能提供帮助就太好了。
我需要将基因名称与附加到它们的描述分开。使用在 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"
我很确定这可以在一行中完成。尽量让你的问题更清楚,可能有人会提出一些花哨的正则表达式来完成工作。