首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >字符的起始位置和结束位置;R

字符的起始位置和结束位置;R
EN

Stack Overflow用户
提问于 2021-10-26 17:32:43
回答 1查看 90关注 0票数 1

我在试着

  1. 在V1
  2. 列中"-“字符的起始和结尾位置,以及在V2
  3. 列中这些位置的相应字符,然后是

的长度

任何帮助都将不胜感激!

代码语言:javascript
运行
复制
ip <- structure(list(V1 = c("ab---cdef", "abcd---ef", "a--bc--def"), 
    V2 = c("xxxxxxxyy", "xxxxxyyyy", "xxxyyyzzzz")), class = "data.frame", row.names = c(NA, 
-3L))

我尝试了stringi_locate,但它输出了单个位置。例如,对于这个“ab--cdef”,而不是3-5,它输出3-3,4-4,5-5。

预期产出:

代码语言:javascript
运行
复制
op <- structure(list(V1 = c("ab---cdef", "abcd---ef", "a--bc--def"), 
    V2 = c("xxxxxxxyy", "xxxxxyyyy", "xxxyyyzzzz"), output = c("x:x-3:5-3", 
    "x:y-5:7-3", "x:x-2:3-2; y-z:6:7-2")), class = "data.frame", row.names = c(NA, 
-3L))

输出列必须具有

position

  • Then
  1. V2列中关于V1
  2. 中"-“的开始和结尾的字符,然后开始和结束V2的长度

代码语言:javascript
运行
复制
   V1          V2           output
ab---cdef    xxxxxxxyy     x:x-3:5-3

谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-10-26 17:54:27

下面是一个使用grepexpr获取字符串中所有匹配的示例。

代码语言:javascript
运行
复制
x <- gregexpr("-+", ip$V1)
mapply(function(m, s, r) {
  start <- m
  len <- attr(m, "match.length")
  end <- start + len-1
  part <- mapply(substr, r, start, end)
  paste0(part, "-", start, ":", end, "-", len, collapse=";")
  
}, x, ip$V1, ip$V2)
# [1] "xxx-3:5-3"         
# [2] "xyy-5:7-3"        
# [3] "xx-2:3-2;yz-6:7-2"

我不知道您将xxx转换为x:xxyyx-y的逻辑是什么,也不知道如何将其推广到其他序列,因此可以随意更改该部分。但是,您可以使用返回的match对象的属性获取匹配的开始和长度。使用-+作为模式非常重要,因此您可以匹配一次破折号,而不仅仅是一个破折号。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69727575

复制
相关文章

相似问题

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