正则表达式匹配包含不超过1个空格的字符串中的Hashtags

时间:2017-03-31 00:46:13

标签: regex

我要做的是匹配字符串中的主题标签,但主题标签中可能有一个空格:#brown fox。大多数主题标签都是单个字词#brown#fox,但有些标签格式不正确,导致输入空格。

包含空格的主题标签只允许包含两个单词,因此允许使用#space suit,但不允许使用#brown fox jumps

  1. 快速#棕色狐狸跳过对这只懒狗。
  2. brown, fox, jumps

    1. 快速#棕色狐狸跳过对这只懒狗。
    2. brown fox, jumps

      1. 快速#棕色狐狸跳过超过懒惰的<
      2. brown fox, jumps, dog

        如果有一个主题标签,后跟一个单词,然后是一个主题标签,那么我们可以假设该单词是针对该主题标签的。否则,我们不应该在小组中捕获它。

        这是我到目前为止所尝试的内容,但显然它与我的需求无关: https://regex101.com/r/vHOCaf/1

        (\#+\w{2,})|(\#([\w]){2,}\s{0,1}([\w]){2,})
        

3 个答案:

答案 0 :(得分:4)

我认为这就是你想要的:/#(?:\w+\b)(?: ?\w*\b)/g,它在#之后最多匹配2个字,或者如果第二个字也有#则只匹配一个。

在此处查看:https://regex101.com/r/Bq0qNM/2

[编辑]如果后面没有#,则将正则表达式更改为与第二个单词不匹配:

/#(?:(?:\w+\b \w+\b)(?= #|$)|\w+\b)/g

请在此处查看结果:https://regex101.com/r/Bq0qNM/3

[编辑]较短的 /#(?:\w+ ?\w+(?= #|$)|\w+\b)/ghttps://regex101.com/r/Bq0qNM/4

答案 1 :(得分:1)

你需要的正则表达式必须具有正向前瞻性,以便与后跟单词而不跟随其他主题标签的主题标签不匹配:

#\w+\b(?:\s\w+\b(?=\s#\w+))?

enter image description here

Debuggex Demo

答案 2 :(得分:0)

这个怎么样

#(\w+(?:\s+\w+)?)