基于朱莉娅的正则表达式的分割线

Vad*_*kov 2 regex julia

我有兴趣在Julia中使用正则表达式分割一行.我的输入是Blei的LDA-C格式的语料库,docId wordID : wordCNT例如,包含五个单词的文档表示如下:

186 0:1 12:1 15:2 3:1 4:1
Run Code Online (Sandbox Code Playgroud)

我正在寻找一种方法将单词及其计数聚合成单独的数组,即我想要的输出:

words =  [0, 12, 15, 3, 4]
counts = [1,  1,  2, 1, 1]
Run Code Online (Sandbox Code Playgroud)

我试过用了m = match(r"(\d+):(\d+)",line).但是,它只找到第一对0:1.我正在寻找类似Python的东西re.compile(r'[ :]').split(line).我如何根据朱莉娅的正则表达式划分一条线?

Mat*_* B. 6

这里没有必要使用正则表达式; Julia的split函数允许使用多个字符来定义拆分应发生的位置:

julia> split(line, [':',' '])
11-element Array{SubString{String},1}:
 "186"
 "0"
 "1"
 "12"
 "1"
 "15"
 "2"
 "3"
 "1"
 "4"
 "1"

julia> words = v[2:2:end]
5-element Array{SubString{String},1}:
 "0"
 "12"
 "15"
 "3"
 "4"

julia> counts = v[3:2:end]
5-element Array{SubString{String},1}:
 "1"
 "1"
 "2"
 "1"
 "1"
Run Code Online (Sandbox Code Playgroud)


Vad*_*kov 5

我发现了eachmatch在正则表达式匹配上返回迭代器的方法。另一种解决方案是迭代每个匹配:

words, counts = Int64[], Int64[]
for m in eachmatch(r"(\d+):(\d+)", line)
    wd, cnt = m.captures
    push!(words,  parse(Int64, wd))
    push!(counts, parse(Int64, cnt))
end
Run Code Online (Sandbox Code Playgroud)