从 UCSC 名称中提取坐标
Extract coordinates form UCSC names
我有一个像这样的字符串:
hg38_ct_tbrefGene_6787_NM_000029_1_range=chr1:230709995-230710853_5'pad=0_3'pad=0_strand=-_repeatMasking=none
我想提取坐标,在上面的例子中:230709995 和 230710853。我不得不提一下,字符串的前一部分并不总是相同的长度。我想 gsub
是最好的选择,但我无法设法得到它们(太多的“_”)。
此外,对于这种问题,模式匹配cheatsheet/book/blog的建议会很棒!
谢谢!
您可以为此目的使用正则表达式和捕获组。如需更多信息,只需在网络上搜索 "regex" 或 "regular expression",您会发现多个站点将指导您如何设置灵活的搜索和提取模式。下面的字符串提取工作如下(我假设坐标总是以 range 这个词开头)。作为 gsub 的替代品,您也可以使用 stringi
包中的 stri_extract
。
搜索捕获组(括号内的内容):
(^.*)
字符串开头后跟任何字符零次或多次
(range.*:)
range 后跟任意字符零次或多次后跟冒号 :
(\d+)
一位或多位
(\D)
一个非数字字符
(\d+)
一位或多位
(.*$)
任何字符出现零次或多次直到字符串结束
摘录:
\3
捕获第 3 组,即第一个 (\d+)
\5
捕获组 5,即第二个 (\d+)
string <- "hg38_ct_tbrefGene_6787_NM_000029_1_range=chr1:230709995-230710853_5'pad=0_3'pad=0_strand=-_repeatMasking=none"
strsplit(gsub("(^.*)(range.*:)(\d+)(\D)(\d+)(.*$)", "\3 \5", string , perl = TRUE), " ")
# [[1]]
# [1] "230709995" "230710853"
我有一个像这样的字符串:
hg38_ct_tbrefGene_6787_NM_000029_1_range=chr1:230709995-230710853_5'pad=0_3'pad=0_strand=-_repeatMasking=none
我想提取坐标,在上面的例子中:230709995 和 230710853。我不得不提一下,字符串的前一部分并不总是相同的长度。我想 gsub
是最好的选择,但我无法设法得到它们(太多的“_”)。
此外,对于这种问题,模式匹配cheatsheet/book/blog的建议会很棒! 谢谢!
您可以为此目的使用正则表达式和捕获组。如需更多信息,只需在网络上搜索 "regex" 或 "regular expression",您会发现多个站点将指导您如何设置灵活的搜索和提取模式。下面的字符串提取工作如下(我假设坐标总是以 range 这个词开头)。作为 gsub 的替代品,您也可以使用 stringi
包中的 stri_extract
。
搜索捕获组(括号内的内容):
(^.*)
字符串开头后跟任何字符零次或多次
(range.*:)
range 后跟任意字符零次或多次后跟冒号 :
(\d+)
一位或多位
(\D)
一个非数字字符
(\d+)
一位或多位
(.*$)
任何字符出现零次或多次直到字符串结束
摘录:
\3
捕获第 3 组,即第一个 (\d+)
\5
捕获组 5,即第二个 (\d+)
string <- "hg38_ct_tbrefGene_6787_NM_000029_1_range=chr1:230709995-230710853_5'pad=0_3'pad=0_strand=-_repeatMasking=none"
strsplit(gsub("(^.*)(range.*:)(\d+)(\D)(\d+)(.*$)", "\3 \5", string , perl = TRUE), " ")
# [[1]]
# [1] "230709995" "230710853"