2015-10-14 2 views
0

Пытается извлечь информацию со страниц Википедии. Первоначально я хотел определить, какие страницы касались компаний. Я использовал следующее регулярное выражение, чтобы проверить, было ли слово «компания» между фразой «инфобокс» и первой «|» характер,Извлечение подстроки с использованием Scala regex

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

Теперь я хотел бы рассчитывать все различные типы infoboxes, которые присутствуют в Википедии. Я пытался изменять свое выражение регулярных выражений и протестировал его на образце:

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

захвата группа (группа 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 
Смежные вопросы