2015-10-14 116 views
0

試圖從維基百科頁面提取信息。本來我想確定哪些網頁是關於公司的。我使用了以下正則表達式來檢查公司這個詞是否介於短語「信息框」和第一個「|」之間字符,使用Scala正則表達式提取子字符串

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

現在我想要計算維基百科中存在的所有不同類型的信息框。我想改變我的正則表達式表達和測試它的樣本:

​​3210

正則表達式模式不匹配,所以我得到一個scala.MatchError。

我該如何改變我的正則表達式來提取信息框類型(即「信息框」和「|」的第一個實例之間的子字符串)?

+1

捕捉組(第1組精確)檢查了這一點https://regex101.com/r/kU4tF7/1 –

回答

0

多虧了評論,解決的辦法是

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