2013-09-25 4 views
-1

Я пытаюсь извлечь дату 11 сентября 2013 из источника страницы следующей страницы в Scala:регулярное выражение для извлечения даты из веб-страницы в Скале

http://www.thehindubusinessline.com/markets/todays-pick/exide-industries-rs-1312-buy/article5117122.ece

регулярное выражение Я использую это:

val dateregex = "</span>//s+[a-zA-Z0-9,:;& \t]+//s+</div>".r 

, а затем использовать его в качестве:

val dates = dateregex findAllIn content2 

, где content2 - это источник содержимого страницы

У меня нет выхода. Может ли кто-нибудь предложить вам изменить мое регулярное выражение?

+0

вы, вероятно, имел в виду '\ s +' вместо ' // s + ', хотя этот шаблон, похоже, слишком много ... – Jerry

+0

Я использовал это, наконец, для успешного завершения даты: val dateregex =" [a-zA-Z0-9,] +:     \\ s + ".r – user2320655

ответ

0

Вы меняли местный характер. You выражение отлично работает, просто используйте \\s+:

scala> val dateregex = "</span>\\s+[a-zA-Z0-9,:;& \t]+\\s+</div>".r 
dateregex: scala.util.matching.Regex = </span>\s+[a-zA-Z0-9,:;&  ]+\s+</div> 

scala> val d = dateregex findAllIn source 
d: scala.util.matching.Regex.MatchIterator = non-empty iterator 

scala> d.toSet 
res9: scala.collection.immutable.Set[String] = 
Set(</span> 
September 11, 2013:&nbsp;&nbsp; 
</div>) 

Однако, это немного слишком «жадность», если вы хотите получить только дату.

Кроме того, если вы применяете это ко всей странице, рассмотрите возможность сопоставления div class = "article-dateline" или лучше запросите его, а затем примените ваше регулярное выражение.

Я хотел бы использовать это регулярное выражение вместо:
EDIT: Изменен пример использования тройные кавычки как это было предложено @ pagoda_5b, чтобы избежать двойного \

val dateregex = new scala.util.matching.Regex("""</span>\s+([a-zA-Z]+)\s+([0-9]+),\s+([0-9]+)""","month","day","year") 
val d = dateregex findFirstIn source match { 
    case Some(dateregex(month,day,year)) => println(s" Month= $month, Day=$day, Year=$year") 
    case None => println("No Match") 
} 

result> Month= September, Day=11, Year=2013 
+4

Я обычно использую тройные цитируемые строки для regexp. Это облегчает решение проблемных символов. Подобно '" "" \ s + ([a-zA-Z] +) \ s + ([0-9] +), \ s + ([0-9] +) "" "" –

Смежные вопросы