You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

APL中如何获取字符串内所有匹配子串的起始位置?

解决APL中获取所有匹配子串起始位置的问题

要获取大字符串中所有与小字符串的长度为3的子串匹配的起始位置,你可以调整思路,直接检查大字符串的每个3长度滑动窗口是否存在于小字符串的3长度滑动窗口集合中,再提取对应位置:

⍸ (3,/'ABCDEFGHIJKLMNOP') ∊ (3,/'DEFGHI')

这段代码的逻辑是:

  • 3,/'ABCDEFGHIJKLMNOP' 生成大字符串的所有3长度滑动子串
  • 3,/'DEFGHI' 生成小字符串的所有3长度滑动子串(共4个:DEF EFG FGH GHI)
  • ∊ 用于检查大字符串的每个子串是否属于小字符串的子串集合,返回布尔向量
  • ⍸ 提取布尔向量中所有为1的位置,即你需要的起始位置 4 5 6 7

另外,你原来的代码返回单个位置是因为(3,/'DEFGHI') ⍷ 3,/'ABCDEFGHIJKLMNOP'返回的是4×14的布尔矩阵,⍸会返回矩阵中所有1的线性索引(比如第一个匹配的线性索引是4),而非对应的列号(起始位置)。如果想基于原代码修改,可以用如下方式提取列位置:

⊃∘.,⍸ (3,/'DEFGHI') ⍷ 3,/'ABCDEFGHIJKLMNOP'

这里⊃∘.,⍸会先找出所有匹配的行和列坐标,再提取列坐标部分,最终得到目标结果。

内容的提问来源于stack exchange,提问作者userABC123

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 04:18:19