我有一个很长的字符串让我们说
I like this #computer and I want to buy it from #XXXMall.
我知道正则表达式模式是
Pattern tagMatcher = Pattern.compile("[#]+[A-Za-z0-9-_]+\\b");
现在我想获取数组中的所有主题标签。我如何使用此表达式从字符串中获取所有哈希标记的数组,如
ArrayList hashtags = getArray(pattern, str)
答案 0 :(得分:2)
你可以这样写吗?
private static List<String> getArray(Pattern tagMatcher, String str) {
Matcher m = tagMatcher.matcher(str);
List<String> l = new ArrayList<String>();
while(m.find()) {
String s = m.group(); //will give you "#computer"
s = s.substring(1); // will give you just "computer"
l.add(s);
}
return l;
}
此外,您可以使用\\w-
代替A-Za-z0-9-_
制作正则表达式[#]+[\\w]+\\b
答案 1 :(得分:0)
This link肯定有助于实现您的目标。
它说:
find()方法搜索正则表达式的出现次数 在文本中传递给Pattern.matcher(text)方法的时候 Matcher创建了。如果可以在文本中找到多个匹配项,则 find()方法将首先找到,然后为每个后续调用 找到()它将移动到下一场比赛。
方法start()和end()将索引放入文本中 找到的匹配开始和结束的地方。
示例:
String text =
"This is the text which is to be searched " +
"for occurrences of the word 'is'.";
String patternString = "is";
Pattern pattern = Pattern.compile(patternString);
Matcher matcher = pattern.matcher(text);
int count = 0;
while(matcher.find()) {
count++;
System.out.println("found: " + count + " : "
+ matcher.start() + " - " + matcher.end());
}
你现在得到了提示。
答案 2 :(得分:0)
以下是使用Matcher
Pattern tagMatcher = Pattern.compile("#+[-\\w]+\\b");
Matcher m = tagMatcher.matcher(stringToMatch);
ArrayList<String> hashtags = new ArrayList<>();
while (m.find()) {
hashtags.add(m.group());
}
我冒昧地简化你的正则表达式。 #
不需要在字符类中。 [A-Za-z0-9_]
与\w
相同,因此[A-Za-z0-9-_]
与[-\w]
相同
答案 3 :(得分:0)
您可以使用:
String val="I like this #computer and I want to buy it from #XXXMall.";
String REGEX = "(?<=#)[A-Za-z0-9-_]+";
List<String> list = new ArrayList<String>();
Pattern pattern = Pattern.compile(REGEX);
Matcher matcher = pattern.matcher(val);
while(matcher.find()){
list.add(matcher.group());
}
(?<=#)
积极的外观 - 断言字符#
确实匹配。
答案 4 :(得分:0)
您可以使用以下代码获取名称
String saa = "#{akka}nikhil#{kumar}aaaaa";
Pattern regex = Pattern.compile("#\\{(.*?)\\}");
Matcher m = regex.matcher(saa);
while(m.find()) {
String s = m.group(1);
System.out.println(s);
}
会打印
akka
kumar