正则表达式查找字符串中的单词

Regex to find words inside a string

请在 regex 方面提供一些帮助,以便在 Linkify.

中用作 Pattern

我正在尝试提取字符串中的 #hashtags@mentions,因此我需要在字符串中找到单词以 #@ 开头(当然以空格结尾),仅在一个正则表达式中。

在单词内部,我需要承认任何语言中的所有可能的字符(某处 :))。

谢谢。

编辑

当我说 every possible chars 我错了:我无论如何都需要遵循 Twitter 的相同规则,所以例如像 - 这样的字符是不允许的.

试试这个正则表达式(在 Java 中使用 \ 而不是 \:

/(#\S+)|(@\S+)/g

/([#@]\S+)/g

你也可以使用这个来使用 </code> 替换:</p> <pre><code>/.*?([#@]\S+)[^#@]*/g

[Regex Demo]

如果你想删除 #@ 使用这个:

/.*?[#@](\S+)[^#@]*/g

/.*?[#@](\S+)[^#@\-]*/g

String rgx = ".*?[#@](\S+)[^#@\-]*";
Pattern pattern = Pattern.compile(rgx, Pattern.DOTALL);

更新

看到你想根据推特识别hash tags 阅读_Actual_ Twitter format for hashtags? Not your regex, not his code-- the actual one?

试试这个模式:

"^[@#]\w+|(?<=\s)[@#]\w+"

它匹配以 "@""#" 开头的单词,这些单词位于行首或前面有 space

代码示例:

public static void main(String[] args) throws Exception {
    String string = "#hashtags and @mentions";
    Matcher matcher = Pattern.compile("^[@#]\w+|(?<=\s)[@#]\w+").matcher(string);
    while (matcher.find()) {
        System.out.println(matcher.group());
    }
}

结果:

#hashtags
@mentions

如果您想要 Twitter 规则,为什么不使用比任何人都更了解规则的图书馆:the Twitter themselves? :-)

如果您使用 Gradle,您只需将 compile 'com.twitter:twitter-text:1.12.1' 添加到 Gradle 文件中的依赖项即可。

或者对于 Maven,添加到 pom.xml:

<dependencies>
  <dependency>
    <groupId>com.twitter</groupId>
    <artifactId>twitter-text</artifactId>
    <version>1.12.1</version>
  </dependency>
</dependencies>

然后在您的代码中,您可以像这样调用 Twitter 库:

import com.twitter.Extractor;

public class Main {
    public static void main(String[] args) {
        Extractor extractor = new Extractor();
        String text = "extracting hashtags and mentions in #java using @twitter library from @github";

        System.out.println("#hashtags:");
        for (String hashtag : extractor.extractHashtags(text)) {
            System.out.println(hashtag);
        }

        System.out.println();
        System.out.println("@mentions:");
        for (String mention : extractor.extractMentionedScreennames(text)) {
            System.out.println(mention);
        }
    }
}