使用关键字

时间:2017-03-16 19:18:46

标签: regex scala

我最近才开始研究正则表达式,只知道基础知识,没有高级或以后的学习内容......比如反向引用,Lookarounds等。

我有一个小问题,我需要解决,但无法为它编写正则表达式。模式看起来很简单,但我不知道如何写它。

字符串:

[CS]v1|<bunch of alpha numberic text>[CE]

所以[CS]和[CE]标记字符串的开头和结尾..现在我只需要从标签中提取<bunch of alpha numeric text>。 RE甚至应该忽略它的"v1|"部分。

请帮忙吗?我多次参加论坛,我看到从两者之间提取文本的帖子,但我无法将同样的问题应用于我的问题..:/

感谢所有人/任何帮助。

P.S - 我在Scala中这样做,因为我需要使用Spark。

更新:我试过这个......不是最好的,但它现在让我得到了结果。这是基于以下假设:感兴趣的领域将始终遵守上述模式。

val pattern = "\\w+-\\w+\\b".r
val f = (pattern findAllIn visitor_id).mkString("")
val result = f.replace("-", "")

对于像

这样的字符串
[CS]v1|2C33FAB2851D11F4-6000017080003FAF[CE]

上面的代码会给我"2C33FAB2851D11F46000017080003FAF" ..

但我真正想要学习的是,是否有办法识别边界[CS]和[CE]并在其间得到文本。

1 个答案:

答案 0 :(得分:0)

您没有很好地描述您的要求。看起来你只需要一个简单的子串公式。

val str = "[CS]v1|<bunch of alpha numberic text>[CE]"
val extract = str.substring(7, str.length-4)

但如果你真的想使用正则表达式,可能会这样做。

val str = "[CS]v1|<bunch of alpha numberic text>[CE]"
val extractor = "[^|]+\\|(.*)\\[..]".r
val extract = str match {
  case extractor(s) => s
  case _ => ""
}