Scala分裂字符串正则表达式模式

时间:2017-01-05 10:13:10

标签: regex scala

我有一个看起来像这样的字符串,我想提取管道和代字号之间的位。

{>}D003 S/N|555555~EB

所以解析的结果应该给我555555。这是我尝试过的,但没有成功:

"""\D003 S/N|.*\~""".r.findFirstIn("{>}D003 S/N|555555~EB")

给了我:

Some({>}D003 S/N|555555~)

1 个答案:

答案 0 :(得分:2)

您可以将简单的非锚定正则表达式与捕获组一起使用:D003 S/N\|([^~]+)~

请参阅Scala demo

val rx = """D003 S/N\|([^~]+)~""".r.unanchored
val s = "{>}D003 S/N|555555~EB"
val res = s match { 
    case rx(c) => c
    case _ => ""
}
println(res)

模式详情

  • D003 S/N\| - 匹配文字字符序列D003 S/N|
  • ([^~]+) - 捕获第1组,匹配除~
  • 以外的1个或多个字符
  • ~ - 文字字母~