在Julia中找到所有正则表达式匹配项的索引吗?

Dom*_*Dom 4 regex julia

我正在寻找一个行为类似于matchall()但返回包含匹配索引而不是字符串的数组的函数?

spp*_*pmg 8

感谢亚历山大莫利的回答。您可以使用findall()来获取UnitRange正则表达式。

julia> findall(r"[0-9]+","aaaa1aaaa22aaaa333")
3-element Array{UnitRange{Int64},1}:
 5:5
 10:11
 16:18
Run Code Online (Sandbox Code Playgroud)

另外,如果你想通过正则表达式获取字符串,你可以使用 SubString()

julia> s="aaaa1aaaa22aaaa333" ;

julia> SubString.(s, findall(r"[0-9]+",s))
3-element Array{SubString{String},1}:
 "1"
 "22"
 "333"
Run Code Online (Sandbox Code Playgroud)

(以上代码在 v1.3.0 上测试过)


Ale*_*ley 6

eachmatch 将为您提供正则表达式匹配项的迭代器。

因此,通过列表理解,您可以执行此操作

[x.offset for x in eachmatch(r"[0-9]","aaaa1aaaa2aaaa3")]

或这个

map(x->getfield(x,:offset), eachmatch(r"[0-9]","aaaa1aaaa2aaaa3"))

甚至这个...

getfield.(collect(eachmatch(r"[0-9]","aaaa1aaaa2aaaa3")), [:offset])

全部返回:

3-element Array{Int64,1}:
  5
 10
 15
Run Code Online (Sandbox Code Playgroud)