Как мне соответствовать шаблону в Scala? - PullRequest
0 голосов
/ 27 октября 2010

Мне нужно сделать шаблон в Scala, это код:

object Wykonaj{

val doctype = DocType("html", PublicID("-//W3C//DTD XHTML 1.0 Strict//EN","http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"), Nil)

  def main(args: Array[String]) {
  val theUrl = "http://axv.pl/rss/waluty.php"
  val xmlString = Source.fromURL(new URL(theUrl)).mkString
  val xml = XML.loadString(xmlString)
   val zawartosc= (xml \\ "description")
 val pattern="""<descrition> </descrition>""".r 
 for(a <-zawartosc) yield a match{
 case pattern=>println(pattern) 
 }
     }     
}

Проблема в том, что мне нужно сделать val pattern=any шаблон, чтобы получить от

<description><![CDATA[ <img src="http://youbookmarks.com/waluty/pic/waluty/AUD.gif"> dolar australijski 1AUD | 2,7778 | 210/A/NBP/2010 ]]> </description>

только это dolar australijski 1AUD |2,7778 |210 / A / NBP / 2010

Ответы [ 2 ]

1 голос
/ 27 октября 2010

Попробуйте

import scala.util.matching.Regex

//...

val Pattern = new Regex(""".*; ([^<]*) </description>""")

//...

for(a <-zawartosc) yield a match {
  case Pattern(p) => println(p)
}

Это немного круто (я не часто использую RE со Scala), но, похоже, это работает. CDATA структурируется как &gt; объекты, поэтому RE пытается найти текст после точки с запятой и перед закрывающим тегом описания.

1 голос
/ 27 октября 2010
val zawartosc = (xml \\ "description")
val pattern = """.*(dolar australijski.*)""".r 
val allMatches = (for (a <- zawartosc; text = a.text) yield {text}) collect { 
   case pattern(value) => value }
val result = allMatches.headOption // or .head 

Это в основном вопрос использования правильного регулярного выражения.В этом случае вы хотите сопоставить строку, которая содержит dolar australijski.Он должен допускать дополнительные символы до dolar.Так что используйте .*.Затем используйте скобки, чтобы отметить начало и конец того, что вам нужно.Обратитесь к Java API для полной документации .

Что касается понимания for, я преобразовываю элемент XML в текст перед выполнением сопоставления, а затем собираю те, которые соответствуют шаблону, используя метод collect.Тогда желаемый результат должен быть первым и единственным элементом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...