相关疑难解决方法(0)

如何获取字符串中所有出现的模式的索引

string = "Jack and Jill went up the hill to fetch a pail of water. Jack fell down and broke his crown. And Jill came tumbling after. "
d = string.match(/(jack|jill)/i) # -> MatchData "Jill" 1:"Jill"
d.size # -> 1
Run Code Online (Sandbox Code Playgroud)

这只匹配它看起来的第一次出现.
string.scan部分工作,但它没有告诉匹配模式的索引.

如何获得模式的所有匹配实例及其索引(位置)的列表?

ruby regex position pattern-matching

11
推荐指数
1
解决办法
4767
查看次数

Smalltalk中子字符串的索引

似乎Smalltalk实现错过了一个算法,该算法返回String中子字符串的所有索引.最相似的只返回一个元素的索引,例如:firstIndexesOf:in:,findSubstring:,findAnySubstring:variants.

Ruby中实现,但第一个依赖于Ruby hack,第二个不能忽略重叠的字符串,最后一个使用Enumerator类,我不知道如何转换为Smalltalk.我想知道这个Python实现是否是最好的开始路径,因为考虑两种情况,重叠或不重叠,并且不使用正则表达式.

我的目标是找到一个提供以下行为的包或方法:

'ABDCDEFBDAC' indicesOf: 'BD'. "#(2 8)"
Run Code Online (Sandbox Code Playgroud)

考虑重叠时:

'nnnn' indicesOf: 'nn' overlapping: true. "#(0 2)"
Run Code Online (Sandbox Code Playgroud)

不考虑重叠时:

'nnnn' indicesOf 'nn' overlapping: false. "#(0 1 2)"
Run Code Online (Sandbox Code Playgroud)

在Pharo中,当在Playground中选择文本时,扫描程序会检测子字符串并突出显示匹配项.但是我找不到这个的String实现.

到目前为止,我的最大努力导致了String(Pharo 6)中的这种实现:

indicesOfSubstring: subString
  | indices i |

  indices := OrderedCollection new: self size.
  i := 0.
  [ (i := self findString: subString startingAt: i + 1) > 0 ] whileTrue: [
    indices addLast: i ].
  ^ indices
Run Code Online (Sandbox Code Playgroud)

string smalltalk visualworks pharo dolphin-smalltalk

5
推荐指数
1
解决办法
363
查看次数