首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何检测字符串中特定字符集的位置范围

如何检测字符串中特定字符集的位置范围
EN

Stack Overflow用户
提问于 2022-02-18 14:33:47
回答 4查看 169关注 0票数 6

我有以下顺序:

代码语言:javascript
运行
复制
my_seq <- "----?????-----?V?D????-------???IL??A?---"

我想要做的是检测非虚线字符的位置范围。

代码语言:javascript
运行
复制
----?????-----?V?D????-------???IL??A?---
|   |   |     |      |       |       |  
1   5   9    15     22      30      38

最后的输出将是字符串的向量:

代码语言:javascript
运行
复制
out <- c("5-9", "15-22", "30-38")

我怎样才能用R来实现这一点呢?

EN

回答 4

Stack Overflow用户

发布于 2022-02-18 14:53:05

受@lovalery的伟大回答的启发,base R解决方案是:

代码语言:javascript
运行
复制
g <- gregexpr(pattern = "[^-]+", my_seq)
d <-data.frame(start = unlist(g), 
           end = unlist(g) + attr(g[[1]], "match.length") - 1)
paste(s$start, s$end, sep ="-")
# [1] "1-5"   "11-18" "26-34"
票数 5
EN

Stack Overflow用户

发布于 2022-02-18 16:19:45

utf8ToInt的R基中的单线列

代码语言:javascript
运行
复制
apply(matrix(which(diff(c(FALSE, utf8ToInt(my_seq) != 45L, FALSE)) != 0) - 0:1, 2), 2, paste, collapse = "-")
#> [1] "5-9"   "15-22" "30-38"
票数 5
EN

Stack Overflow用户

发布于 2022-02-18 15:05:15

试一试

代码语言:javascript
运行
复制
paste0(gregexec('-\\?', my_seq)[[1]][1,] + 1, '-',
       gregexec('\\?-', my_seq)[[1]][1,])
#> [1] "5-9"   "15-22" "30-38"
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71175188

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档