LoadError: PCRE compilation error: lookbehind assertion is not fixed length

LoadError: PCRE compilation error: lookbehind assertion is not fixed length

当我尝试在 julia 中编写一个使用后视模式的解析器时,它抛出一个 PCRE compilation error

function parser(str::String)
    a = match(r"^[a-zA-Z]*_[0-9]", str)
    b = match(r"(?<=[a-zA-Z]*_[0-9]_)[a-zA-Z]", str)
    a.match, b.match
end

parser("Block_1_Fertilized_station_C_position_23 KA1F.C.23")
# LoadError: PCRE compilation error: lookbehind assertion is not fixed length at offset 0

有人可以解释我做错了什么吗?

Julia 使用 Perl 兼容正则表达式 (pcre),并且如 pcre documentation:

中所述

Each top-level branch of a lookbehind must be of a fixed length.

这意味着您不能在后视模式中使用 *+ 等运算符。

所以你必须想出一个不使用它们的模式。在您的情况下,以下可能有效:

function parser(str::String)
    a = match(r"^[a-zA-Z]*_[0-9]", str)
    b = match(r"(?<=_[0-9]_)[a-zA-Z]*", str)
    a.match, b.match
end

parser("Block_1_Fertilized_station_C_position_23 KA1F.C.23")
# ("Block_1", "Fertilized")