使用Scala正则表达式提取子字符串

时间:2015-10-14 19:17:32

标签: regex scala

尝试从维基百科页面中提取信息。最初我想确定哪些页面是关于公司的。我使用以下正则表达式来检查公司一词是否在短语“infobox”和第一个“|”之间字符,

val text = (...wikipedia page xml...)
val infobox_company = """\{\{.*(?i)infobox[^\|]*company[^\|]*\|""".r
val is_company = infobox_company findFirstIn text != None

现在我想要计算维基百科中存在的所有不同类型的信息框。我尝试改变我的正则表达式并在样本上测试它:

val infobox_regex = """\{\{.*(?i)infobox[^\|](.*)[^\|]*\|""".r
val test_str = "{{Infobox dot-com company | name = 'my_doc_com'}}"
val infobox_regex(info_type) = test_str

正则表达式模式不匹配,因此我得到了一个scala.MatchError。

我应该如何改变我的正则表达式以提取信息框类型(即“信息框”和“|”的第一个实例之间的子串?)

1 个答案:

答案 0 :(得分:0)

感谢评论,解决方案是

val infobox_regex = """\{\{.*(?i)infobox(.*)[^\|]*\|""".r
val info_box_list = (for(m <- infobox_regex findAllMatchIn test_str) yield m group 1).toList