【发布时间】:2019-03-04 17:26:15
【问题描述】:
我有以下结构的文本:
书名:软件工程;作者:约翰;作者:史密斯; 书名:DesignPatterns;作者:Foo;作者:Bar;
元素分隔符是;
book_name 元素后面可以有两个 author 元素
可能有 2 到 10 本书
一本书应该至少有一个作者,但最多有 2 个作者
我想为每本书提取 book_name 和个人作者。
我尝试使用 .scan 方法(收集所有匹配项)进行正则表达式:
iex> regex = ~r/book_name:(.+?;)(author:.+?;){1,2}/
iex> text = "book_name:SoftwareEngineering;author:John;author:Smith;book_name:DesignPatterns;author:Foo;author:Bar;"
iex> Regex.scan(regex, text, capture: :all_but_first)
[["SoftwareEngineering;", "author:Smith;"], ["DesignPatterns;", "author:Bar;"]]
但它没有正确收集作者。它只收集了本书的第二作者。 有人可以帮忙解决这个问题吗?
【问题讨论】: