Regex Scala正则表达式(xml解析)

Regex Scala正则表达式(xml解析),regex,scala,Regex,Scala,我正在解析一个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 E

我正在解析一个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
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

我想知道我怎样才能写出这个的正则表达式。Scala有一些奇怪的正则表达式,我无法理解。

如果我理解你的意思是正确的,你只需要使用正则表达式来获取信息。在这种情况下,您可以使用Scala的提取器功能执行以下操作:

<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
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

首先,基于正则表达式字符串创建提取器。这可以通过在字符串上调用r来实现(确切地说是StringOps类)。之后,您可以使用此提取器读取所有匹配的元素(名称、短名称、值)。在中,你会找到一个很好的解释。

如果我理解你是正确的,你只想使用正则表达式来获取你的信息。在这种情况下,您可以使用Scala的提取器功能执行以下操作:

<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
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

首先,基于正则表达式字符串创建提取器。这可以通过在字符串上调用r来实现(确切地说是StringOps类)。之后,您可以使用此提取器读取所有匹配的元素(名称、短名称、值)。在中,您将找到一个很好的解释。

这不是有效的XML。您确定要在这里使用逗号吗(因为您的语言环境使用逗号作为十进制分隔符)?好的,让它不是xml,我想解析文本行,看起来像这样。关于逗号-我的意思是,对于第一行,我想要这三个值(第一个-美元,第二个-美元,第三个-28576)。所以我不想用()来包装美国多拉,用()来包装美元,用()来包装28567,这是无效的XML。您确定要在这里使用逗号吗(因为您的语言环境使用逗号作为十进制分隔符)?好的,让它不是xml,我想解析文本行,看起来像这样。关于逗号-我的意思是,对于第一行,我想要这三个值(第一个-美元,第二个-美元,第三个-28576)。所以我不想用()来包装美国多拉,用()来包装美元,用()来包装28567。