正则表达式只保留主题标签

Regex to only keep hashtags

使用正则表达式,我试图只在文本中保留主题标签。我正在尝试匹配其他所有内容并替换为不重要的组。但也许有更聪明的方法。

示例文本:

This is a #text, which is #full of #hashtags.
Well, this is not #easy to
#extract #them. 
I think I #start to lose: #hope.

我最好的尝试:([\s\.\,]|^)[^#]\w+([\s\.\,]*?|$)

替换为 </code> returns</p> <pre><code> a #text #full #hashtags #easy #extract #them. I #start: #hope.

预期结果应该有 4 行,如示例所示。空格也可以留。
理想的期望结果:

#text #full #hashtags
#easy
#extract #them
#start #hope

Demo

这个很不错,也很容易理解,并且和你的有相同的替代品:

[^#]*?(#\w+)

它只会吃掉尽可能多的字符,直到遇到 #,然后将所有正常的单词字符捕获到组中,并重复。

Try it online!

如果您不介意保留前导 space(之后可能 trim),您可以在替换和匹配中使用第 1 组:

.*?(\s*#\w+)|.+

模式匹配:

  • .*? 尽可能匹配除换行符外的任何聊天内容
  • (\s*#\w+) 在组 1 中捕获匹配的可选白色 space 字符,然后是 # 和 1+ 个单词字符
  • |
  • .+ 匹配除换行符以外的任何字符 1 次以上

Regex demo

如果您不想保留前导 space 但不介意尾随 space,您可以在替换中使用第 1 组后跟 space并匹配:

.*?(#\w+)|.+

Regex demo