2

我正在尝试使用 java 制作一个简单的正则表达式模式。我需要用一个句子识别任何以星号结尾的大写单词。从以下示例:

Test ABC*  array
我需要识别“ABC *”,或者准确地说,任何以星号结尾的大写字母。我用我有限的正则表达式知识尝试了以下模式匹配,但到目前为止还没有成功。
String text = "Test ABC*  array";
Matcher m = Pattern.compile("\b[A-Z]+[*]?\b").matcher(text);
任何指针将不胜感激。

谢谢

4

4 回答 4

9

问题是星号后面没有单词边界。所以试试这个

Matcher m = Pattern.compile("\\b[A-Z]+\\*\\B").matcher(text);

\B不是单词边界,所以这正是你在 the*和空格之间得到的。

在 Regexr 上查看

于 2012-11-08T21:20:50.003 回答
2

假设您的字符串可以包含多个 AAA* 部分:

String text = "Test ABC*  array";
Matcher m = Pattern.compile("([A-Z]+\\*)").matcher(text);
while (m.find()) {
    System.out.println(m.group());
}
于 2012-11-08T21:19:28.510 回答
1

我会保持简单:

if(text.contains("*")) {
  int index = text.lastIndexOf("*");
  String ident= text.substring(0,index-1);
}
于 2012-11-08T21:19:14.327 回答
0

您必须用反斜杠转义字面星号。它最终成为 Java 中的双反斜杠。

"[A-Z]+\\*"
于 2012-11-08T21:23:29.487 回答