我一直在寻找这个:https://docs.oracle.com/javase/7/docs/api/java/util/regex/Pattern.html
然而,我仍然难以编写正确的命令来获得以下模式的所有表达式:
<$FB $TWTR are getting plummetted>
(&lt;&gt;只是在解析推特时发出句子 - 推文的开头)。我想提取FB TWTR。
任何帮助都非常感激。
答案 0 :(得分:1)
以下是两步法:我们使用正则表达式提取<...>
个组,然后将这些块拆分为单词,看看它们是否以$
开头。
String s = "<$FB $TWTR are getting plummetted>";
Pattern pattern = Pattern.compile("<([^>]+)>");
Matcher matcher = pattern.matcher(s);
while (matcher.find()){
String[] chks = matcher.group(1).split(" ");
for (int i = 0; i<chks.length; i++)
{
if (chks[i].startsWith("$"))
System.out.println(chks[i].substring(1));
}
}
请参阅demo
这是一个1-regex方法(see demo),只有当你对正则表达式有信心时才使用:
String s = "<$FB $TWTR are getting plummetted>";
Pattern pattern = Pattern.compile("(?:<|(?!^)\\G)[^>]*?\\$([A-Z]+)");
Matcher matcher = pattern.matcher(s);
while (matcher.find()){
System.out.println(matcher.group(1));
}
此处使用的正则表达式为(?:<|(?!^)\G)[^>]*?\$([A-Z]+)
。
匹配:
(?:<|(?!^)\G)
- 文字<
,然后在每次成功比赛结束时[^>]*?
- >
以外的0个或更多字符(尽可能少)\$
- 文字$
([A-Z]+)
- 匹配并捕获大写字母(替换为最适合您的目的,可能是\\w
)。