在Scala/Java中查找以hashtag开头的单词

7eumitmz  于 6个月前  发布在  Scala
关注(0)|答案(1)|浏览(63)

我正在尝试编写正则表达式,它将拆分所有以hashtag开头的单词。
例如,在以下案文中,应:

val regex = "???".r

val text = "#shouldMatch1 #shouldMatch2 notMatch nope#shouldMatch3 nooope()#shouldMatch4"

regex.split(text).toList shouldBe List("#shouldMatch1", "#shouldMatch2", "#shouldMatch3", "#shouldMatch4")

字符串
我可以得到的关闭是val regex: Regex = "[^#\\w+]".r,但它分裂了一点:

List("#shouldMatch1", "#shouldMatch2", "notMatch", "nope#shouldMatch3", "nooope", "#shouldMatch4")


因此,在某些情况下,它会找到不以标签开头的单词。你有什么想法或指导我应该如何写正确的表达吗?
代码是用Scala编写的,但在Java中应该是类似的。

8wtpewkr

8wtpewkr1#

您需要将findAllIn#\w+这样的正则表达式一起使用:

val regex = """#\w+""".r
val text = "#shouldMatch1 #shouldMatch2 notMatch nope#shouldMatch3 nooope()#shouldMatch4"
println(regex.findAllIn(text).toList)

字符串
参见Scala demo
主题标签匹配模式可以不同,有很多变化。这里是其中的一些:

  • #\w+-如果主题标签只能包含单词字符
  • #[\w-]+-如果主题标签只能包含单词和连字符
  • #\S+-如果主题标签在#之后包含任意数量的一个或多个非空格字符
  • #\S+\b-如果主题标签在#之后包含一个或多个非空格字符,但您希望它在最后一个非单词字符序列(如逗号等)之前停止
  • (?<!\S)#\S+-如果hashtags在#之后、#之前包含任意数量的一个或多个非空格字符,则只能有空格或字符串开头。

相关问题