2010-10-27 64 views
0

我解析XML文件:有节点用这样的文字斯卡拉正则表达式(XML解析)

<img src="someUrl1"> American Dollar 1USD | 2,8567 | sometext 
<img src="someUrl2"> Euro 1EUR | 3,9446 | sometext 
<img src="someUrl3"> Japanese Jen 100JPY | 3,4885 | sometext 

我想是这样的价值观:

American Dollar, USD, 2,8576 
Euro, EUR, 3,9446 
Japanese Jen, JPY, 3,4885 

我想知道我怎么写这个正则表达式。斯卡拉有一些奇怪的正则表达式,我无法弄清楚。

+0

这不是有效的XML。你确定你想在这里使用逗号(因为你的语言环境使用逗号作为小数点分隔符)? – 2010-10-27 13:35:52

+1

好吧,让它不是XML,我想解析文本的行,看起来像那些。关于逗号 - 我的意思是,对于第一行,我想要这三个值(第一个 - 美元,第二个 - 美元,第三个 - 2,8576)。所以我不想把美国的dolar换成(),USD换成()和2,8567 in()。 – PawelMysior 2010-10-27 13:41:31

回答

6

如果我理解你是正确的,你只是想用正则表达式来获取你的信息。在这种情况下,你可以使用Scala中的提取功能,做这样的事情:

scala> val RegexParser = """(.*) \d+([A-Z]+) \| (.*) \|.*""".r 
RegexParser: scala.util.matching.Regex = (.*) \d+([A-Z]+) \| (.*) \|.* 

scala> val RegexParser(name,shortname,value) = "American Dollar 1USD | 2,8567 | sometext" 
name: String = American Dollar 
shortname: String = USD 
value: String = 2,8567 

scala> val RegexParser(name,shortname,value) = "Euro 1EUR | 3,9446 | sometext" 
name: String = Euro 
shortname: String = EUR 
value: String = 3,9446 

scala> val RegexParser(name,shortname,value) = "Japanese Jen 100JPY | 3,4885 | sometext" 
name: String = Japanese Jen 
shortname: String = JPY 
value: String = 3,4885 

首先,你创建一个基于正则表达式字符串的提取。这可以通过在一个String上调用r(类StringOps来完成)来完成。之后,您可以使用此提取器读出所有匹配的元素(名称,短名称,值)。在this blog post你会发现一个很好的解释。