正则表达式查找字符串中的单词
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
如果你想删除 #
和 @
使用这个:
/.*?[#@](\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);
}
}
}
请在 regex 方面提供一些帮助,以便在 Linkify.
中用作Pattern
我正在尝试提取字符串中的 #hashtags 和 @mentions,因此我需要在字符串中找到单词以 #
和 @
开头(当然以空格结尾),仅在一个正则表达式中。
在单词内部,我需要承认任何语言中的所有可能的字符(某处 :))。
谢谢。
编辑
当我说 every possible chars 我错了:我无论如何都需要遵循 Twitter 的相同规则,所以例如像 -
这样的字符是不允许的.
试试这个正则表达式(在 Java 中使用 \
而不是 \
:
/(#\S+)|(@\S+)/g
或
/([#@]\S+)/g
你也可以使用这个来使用 </code> 替换:</p>
<pre><code>/.*?([#@]\S+)[^#@]*/g
如果你想删除 #
和 @
使用这个:
/.*?[#@](\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);
}
}
}