如何从开头和结尾包含#的字符串中获取#标签,最后没有空格?

时间:2018-06-07 04:11:21

标签: swift regex nsregularexpression

这是我的字符串

"I made this wonderful pic last #chRistmas... #instagram #nofilter #snow #fun"

我希望得到#开头和结尾没有空格的#标签。我的预期结果是:

$fun

这是我到目前为止的正则表达式搜索:

#[a-z0-9]+

但它给了我所有的标签而不是我想要的标签。谢谢你的帮助!

3 个答案:

答案 0 :(得分:2)

使用#[a-zA-Z0-9]*$代替您当前的正则表达式

答案 1 :(得分:1)

您可以使用: (^#[a-z0-9]+|#[a-z0-9]+$)

测试online

答案 2 :(得分:1)

似乎您需要匹配字符串末尾的主题标签或字符串中的最后一个主题标签。因此,有几种方法可以解决这个问题。

匹配字符串

中的最后一个#标签
let str = "I made this wonderful pic last #chRistmas... #instagram #nofilter #snow #fun"
let regex = "#[[:alnum:]]++(?!.*#[[:alnum:]])"
if let range = str.range(of: regex, options: .regularExpression) {
    let text: String = String(str[range])
    print(text)
}

<强>详情

  • # - 哈希符号
  • [[:alnum:]]++ - 一个或多个字母数字字符
  • (?!.*#[[:alnum:]]) - 在除当前位置右侧的换行符之外的任何0 +字符之后,没有# + 1 +个字母数字字符。

匹配字符串末尾的#标签

相同的代码,但有以下正则表达式:

let regex = "#[[:alnum:]]+$"

let regex = "#[[:alnum:]]+\\z"

注意\z匹配字符串的结尾,如果hashtag和字符串结尾之间有换行符,则不会有任何匹配(如果是$,那么将是一场比赛)。

关于正则表达式的注意事项

如果主题标签只能以字母开头,则最好使用

#[[:alpha:]][[:alnum:]]*

其中[[:alpha:]]匹配任何字母,[[:alnum:]]*匹配0+字母或/和数字。

请注意,在ICU正则表达式模式中,您可以将[[:alnum:]]写为[:alnum:]