我有一個字串串列,每個字串都告訴我演算法收斂了多少次迭代。
string_list = [
"Converged after 1 iteration",
"Converged after 20 iterations",
"Converged after 7 iterations"
]
如何提取迭代次數?結果會是[1, 20, 7]。我試過正則運算式。顯然(?<=after )(.*)(?= iteration*)會給我介于兩者之間的任何東西after,iteration但這不起作用:
occursin(string_list[1], r"(?<=after )(.*)(?= iteration*)")
uj5u.com熱心網友回復:
要從正則運算式中提取資訊,您需要使用match和captures:
julia> convergeregex = r"Converged after (\d ) iteration"
r"Converged after (\d ) iteration"
julia> parse.(Int, [match(convergeregex, s).captures[1] for s in string_list])
3-element Vector{Int64}:
1
20
7
\d 匹配一系列數字(因此,這里的迭代次數),并且它周圍的括號表示您希望將與之匹配的字串部分放置在結果captures陣列中。
此處不需要lookbehind 和lookahead 運算子( ?<=, ?=)。
uj5u.com熱心網友回復:
有一個很棒的小 Julia 包,它使創建正則運算式更容易,稱為ReadableRegex,幸運的是自述檔案中的第一個示例是查找字串中每個整數的示例:
julia> using ReadableRegex
julia> reg = @compile look_for(
maybe(char_in(" -")) * one_or_more(DIGIT),
not_after = ".",
not_before = NON_SEPARATOR)
r"(?:(?<!\.)(?:(?:[ \-])?(?:\d) ))(?!\P{Z})"
現在可以在您的字串串列中廣播該正則運算式:
julia> collect.(eachmatch.(reg, string_list))
3-element Vector{Vector{RegexMatch}}:
[RegexMatch("1")]
[RegexMatch("20")]
[RegexMatch("7")]
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/358684.html
上一篇:正則運算式匹配多個字串之一
