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

时间:2017-01-18 16:08:59

标签: regex julia

我正在寻找一个像matchall()一样的函数,但是返回一个包含匹配索引而不是字符串的数组?

2 个答案:

答案 0 :(得分:4)

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

答案 1 :(得分:1)

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

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

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

julia> s="aaaa1aaaa22aaaa333" ;

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

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