【问题标题】:extract words from string including parentheses从包含括号的字符串中提取单词
【发布时间】:2016-04-21 10:23:44
【问题描述】:

我是 Scala 新手。

val str = "Hi My name (is XXX)" 我尝试使用str.split("\\s") 进行拆分,并创建如下字符串数组: 0:嗨 1:我的 2:名称 3:(是 4:XXX)

我想得到 0:嗨 1:我的 2:名称 3:(是XXX) 在 Scala 中是否有任何快速的方法来做到这一点

【问题讨论】:

    标签: regex scala


    【解决方案1】:

    您也可以使用以下正则表达式,尽管它不适用于嵌套括号。

    (\([^)]+\)|\S+)
    

    在控制台中测试:

    @ """(\([^)]+\)|\S+)""".r.findAllIn("Hi My name (is XXX)").toList
    res8: List[String] = List("Hi", "My", "name", "(is XXX)")
    @ """(\([^)]+\)|\S+)""".r.findAllIn("(A B) C D (E F G) H").toList
    res9: List[String] = List("(A B)", "C", "D", "(E F G)", "H")
    @ """(\([^)]+\)|\S+)""".r.findAllIn("Z (A B) C D (E F G) H").toList
    res10: List[String] = List("Z", "(A B)", "C", "D", "(E F G)", "H")
    

    【讨论】:

      【解决方案2】:

      这将在空格处拆分,但始终保持括号之间的内容完整。

      def splitWithParens(s: String) = 
        s.split("[()]").grouped(2).flatMap {
          case Array(a,b) => a.split("\\s+").filter(_.nonEmpty) :+ s"($b)"
          case Array(a) => a.split("\\s+").filter(_.nonEmpty)
        }.toVector
      
      splitWithParens("Hi My name (is XXX)")    // Vector(Hi, My, name, (is XXX))
      splitWithParens("(A B) C D (E F G) H")    // Vector((A B), C, D, (E F G), H)
      splitWithParens("Z (A B) C D (E F G) H")  // Vector(Z, (A B), C, D, (E F G), H)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2017-04-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-12-10
        • 2023-03-24
        • 1970-01-01
        相关资源
        最近更新 更多