R 从UCSC名称中提取坐标

R 从UCSC名称中提取坐标,r,regex,gsub,R,Regex,Gsub,我有一个字符串,比如: hg38_ct_tbrefGene_6787_NM_000029_1_范围=chr1:230709995-230710853_5'pad=0_3'pad=0_链=-_=none 我想提取上述示例中的坐标:230709995和230710853。我必须提到,字符串的前一部分并不总是具有相同的长度。我想gsub是最好的选择,但我无法设法得到它们(太多的“389;”) 另外,对于这类问题,提供一个模式匹配备忘单/书籍/博客的建议将是非常好的! 谢谢 为此,您可以使用正则表达式和

我有一个字符串,比如:

hg38_ct_tbrefGene_6787_NM_000029_1_范围=chr1:230709995-230710853_5'pad=0_3'pad=0_链=-_=none

我想提取上述示例中的坐标:230709995和230710853。我必须提到,字符串的前一部分并不总是具有相同的长度。我想
gsub
是最好的选择,但我无法设法得到它们(太多的“389;”)

另外,对于这类问题,提供一个模式匹配备忘单/书籍/博客的建议将是非常好的!
谢谢

为此,您可以使用正则表达式和捕获组。要了解更多信息,只需在web上搜索“regex”或“regular expression”,您将找到几个网站,它们将指导您如何设置灵活的搜索和提取模式。下面对字符串的提取工作如下(我假设坐标总是在单词range之前)。作为gsub的替代方案,您也可以使用,例如,
stri_extract
from
stringi

搜索捕获组(括号内的内容):
(^.*)
字符串开头,后跟任意字符零次或多次
(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"