我正在寻找一个像matchall()一样的函数,但是返回一个包含匹配索引而不是字符串的数组?
答案 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上测试)