使用Java Matcher类匹配开始和结束字符

问题描述 投票:0回答:2

我希望从#开头并以space结尾的字符串中获取单词。我尝试过使用这个Pattern.compile("#\\s*(\\w+)"),但它不包括像':这样的字符。

我想要只有模式匹配方法的解决方案。

java regex
2个回答
1
投票

我们可以尝试使用模式(?<=\\s|^)#\\S+匹配,它匹配任何以#开头的单词,后跟任意数量的非空白字符。

String line = "Here is a #hashtag and here is #another has tag.";
String pattern = "(?<=\\s|^)#\\S+";
Pattern r = Pattern.compile(pattern);
Matcher m = r.matcher(line);
while (m.find()) {
    System.out.println(m.group(0));
}

#hashtag
#another

Demo

注意:上面的解决方案可能会为您提供标注符号的边缘情况,该标点符号出现在主题标签的末尾。如果您不想这样,那么我们可以将正则表达式重新定义为仅匹配正的某些字符,例如字母和数字。但是,也许这不是你的问题。


0
投票

\s相反的是\S,所以你可以使用这样的正则表达式:

#\s*(\S+)

或者对于Java:

Pattern.compile("#\\s*(\\S+)")

它将捕获任何不是白色空间的东西。

请参阅演示here

如果你想停留在空间角色而不是任何空白区域,请将\S更改为[^ ]。括号内的^意味着它会否定后面的任何内容。

Pattern.compile("#\\s*([^ ]+)")

请参阅演示here

© www.soinside.com 2019 - 2024. All rights reserved.