【问题标题】:How to get hashtag from string that contains # at the beginning and end without space at the end?如何从包含#开头和结尾没有空格的字符串中获取主题标签?
【发布时间】:2018-11-16 20:57:57
【问题描述】:

这是我的字符串

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

并且我想获得在开头和结尾都包含 # 且没有空格的主题标签。我的预期结果是:

$fun

这是我迄今为止的正则表达式搜索:

#[a-z0-9]+

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

【问题讨论】:

    标签: swift regex nsregularexpression


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

      测试一下online

      【讨论】:

        【解决方案3】:

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

        匹配字符串中的最后一个标签

        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:]]++ - 1 个或多个字母数字字符
        • (?!.*#[[:alnum:]]) - 没有 # + 1+ 个字母数字字符,位于当前位置右侧的除换行符之外的任何 0+ 个字符之后。

        匹配字符串末尾的主题标签

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

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

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

        注意\z匹配字符串的最末尾,如果主题标签和字符串末尾之间有换行符,则不会匹配(如果是$,则会匹配)。

        注意正则表达式

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

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

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

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

        【讨论】:

        • 非常详细的答案。谢谢!
        猜你喜欢
        • 2019-11-06
        • 2011-03-01
        • 2011-12-22
        • 1970-01-01
        • 2021-03-22
        • 1970-01-01
        • 2023-03-04
        • 1970-01-01
        • 2011-03-23
        相关资源
        最近更新 更多