代码之家  ›  专栏  ›  技术社区  ›  ScalaBoy

如何使用regex只检索单词

  •  1
  • ScalaBoy  · 技术社区  · 6 年前

    使用regex表达式,如何只检索单词,而忽略逗号、数字等其他符号。?

    val words = text.split("\b([-A-Za-z])+\b")
    

    例如:

    This is a nice day, my name is...
    

    This, is, a, nice, day, my, name, is
    

    忽略时 , ... .

    3 回复  |  直到 6 年前
        1
  •  2
  •   Wiktor Stribiżew    6 年前

    要提取所有单词(包括连字符单词),可以使用

    """\b[a-zA-Z]+(?:-[a-zA-Z]+)*\b""".r.findAllIn(s)
    

    要支持所有Unicode字母,请使用 \p{L} [a-zA-Z]

    val s = "This is a nice day, my name is..."
    val res = """\b\p{L}+(?:-\p{L}+)*\b""".r.findAllIn(s)
    println(res.toList)
    // => List(This, is, a, nice, day, my, name, is)
    

    Scala demo

        2
  •  2
  •   Toto    6 年前

    拆分非字母字符串:

    val words = text.split("[^-A-Za-z]+")
    
        3
  •  0
  •   RAGHHURAAMM    6 年前
    val p ="""[[a-z][A-Z]]+""".r
    

    回复:

    scala> val text = "This is a nice day, my name is..."
    text: String = This is a nice day, my name is...
    
    scala> p.findAllIn(text).toArray
    res24: Array[String] = Array(This, is, a, nice, day, my, name, is)
    
    scala> val text = "This is a nice_day, my_name is..."
    text: String = This is a nice_day, my_name is...
    
    scala> p.findAllIn(text).toArray
    res26: Array[String] = Array(This, is, a, nice, day, my, name, is)