捕獲組
可以使用索引表示法從 RegexMatch
物件訪問捕獲組捕獲的子字串。
例如,以下正規表示式解析以 (555)-555-5555
格式編寫的北美電話號碼:
julia> phone = r"\((\d{3})\)-(\d{3})-(\d{4})"
並假設我們希望從文字中提取電話號碼:
julia> text = """
My phone number is (555)-505-1000.
Her phone number is (555)-999-9999.
"""
"My phone number is (555)-505-1000.\nHer phone number is (555)-999-9999.\n"
使用 matchall
函式,我們可以得到一個匹配自己的子字串陣列:
julia> matchall(phone, text)
2-element Array{SubString{String},1}:
"(555)-505-1000"
"(555)-999-9999"
但是假設我們想要訪問區號(前三位數,括在括號中)。然後我們可以使用 eachmatch
迭代器:
julia> for m in eachmatch(phone, text)
println("Matched $(m.match) with area code $(m[1])")
end
Matched (555)-505-1000 with area code 555
Matched (555)-999-9999 with area code 555
請注意,我們使用 m[1]
,因為區號是我們正規表示式中的第一個捕獲組。我們可以使用函式將電話號碼的所有三個組成部分作為元組:
julia> splitmatch(m) = m[1], m[2], m[3]
splitmatch (generic function with 1 method)
然後我們可以將這樣的函式應用於特定的 RegexMatch
:
julia> splitmatch(match(phone, text))
("555","505","1000")
或者我們可以在每個匹配中發現它:
julia> map(splitmatch, eachmatch(phone, text))
2-element Array{Tuple{SubString{String},SubString{String},SubString{String}},1}:
("555","505","1000")
("555","999","9999")