我最近才开始研究正则表达式,只知道基础知识,没有高级或以后的学习内容......比如反向引用,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]并在其间得到文本。
答案 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 _ => ""
}