使用Scala中的regex从字符串中提取所有标记

时间:2014-04-19 00:54:48

标签: regex scala

我有一个像" httpx:// __ URL __ / __ STUFF__?param = value" 这个样本按照惯例是一个网址......它可以是任何包含零个或多个__X__标记的内容。

我想使用正则表达式来提取所有标记的列表,因此这里的输出将是List(" __ URL __"," __ STUFF __")。请记住,我事先并不知道输入字符串中可能有多少(如果有)令牌。

我一直在努力但却无法想出一个可以解决问题的正则表达式。

这样的事情不起作用:

(?:??(__ [A-ZA-Z0-9] + __))+

3 个答案:

答案 0 :(得分:3)

Scala Regex,它只是Java Regex的包装器,永远不会返回多个子组进行重复。

关于它的唯一方法是为令牌设置一个正则表达式,然后多次找到它。你几乎已经拥有了你想要的一切:

"__[a-zA-Z0-9]+__".r findAllIn "httpx://__URL__/__STUFF__?param=value"

返回Iterator。使用.toSeq或类似内容转换为集合。

答案 1 :(得分:1)

格雷格,你试过一个简单的

_+[^_]+_+

这将匹配所有__TOKENS__

它不会检查?params之后的任何__TOKENLIKE__字符串,但是你已经提到过你不仅仅使用它来表示网址。如果您需要进行一些改进,请告诉我们。

答案 2 :(得分:0)

将正则表达式与split

结合使用
def urlPathComponents(s: String): Option[Array[String]] = 
  """(?<=http(s?)://)[^?]+""".r findFirstIn s map (_.split("/"))