Hastag格式正则表达式(#word或word)

时间:2016-06-19 17:11:20

标签: regex

我有正则表达式的问题

/\A[#a-z]+[#a-z0-9\-\s_.']*\z/

我想匹配

之类的结果
  

aaa #aaa

带有主题标签的单词或没有主题标签的单词。但我的正则表达式允许创建

  

A#一个

我该如何改变?

4 个答案:

答案 0 :(得分:2)

从问题和你的评论中,不清楚,应该是一个单词边界。你可能想要类似的东西:

(?<=^|\s|["'])#?[a-zA-Z]+\b(?=$|\s|[,;.:?!"'])

<强>假设:

  • 单词仅由字母组成。
  • 单词以开头("')和结尾(,;.:?!"')的空格或特殊字符分隔。

特殊字符的基本原理是:

  • for example: food也会产生example
  • set to "on"也会产生on

您可能希望扩展这些字符列表。

答案 1 :(得分:1)

试试这个正则表达式:

#?[^# \n]+

您可以学习如何构建和测试正则表达式on this website

Java中的用法示例(将^和$添加到模式以指示字符串的开头/结尾):

public static void main(String[] args) {
    testFor("aaa");
    testFor("#aaa");
    testFor("a#a");
}

public static void testFor(String toTest) {
    Pattern regex = Pattern.compile("^#?[^# \\n]+$");
    Matcher matcher = regex.matcher(toTest);

    while (matcher.find()) {
        System.out.println(matcher.group());
    }
}

输出继电器

aaa
#aaa

答案 2 :(得分:1)

您可以使用此正则表达式匹配任选以#开头的字词:

(?>\B#|(?<=\s|^))[a-zA-Z][\w'.-]*(?=\s|$)

RegEx Demo

答案 3 :(得分:0)

试试这个正则表达式:

(?<!\w)#\w+|(?<!#)\w+(?!#)

如果你的正则表达式引擎支持前瞻和后瞻,那么应该这样做。