正则表达式以'_'开头,以Java中的空格/换行结束

时间:2011-03-09 09:01:50

标签: java regex

我希望能够找到这种模式'_*' 含义以'_'开头,以空格或新行结束。

我还有另一个正则表达式,只能找到一个大写字母:[A-Z]+ 这是准确的,还是有更好的写作方式?

我使用Java。

4 个答案:

答案 0 :(得分:1)

如果您尝试

String _command = "AFTER_2011/03/01 GREATER_2004";
Pattern patt = Pattern.compile("_\\S+");
Matcher matcher = patt.matcher(_command);
while(matcher.find()) {
    String name = _command.substring(matcher.start()+1, matcher.end());
    System.out.println(name);
}

打印

2011/03/01
2004
编辑:正如@Alan Moore建议您可以执行以下操作。

String _command = "AFTER_2011/03/01 GREATER_2004";
Pattern patt = Pattern.compile("_(\\S+)");
Matcher matcher = patt.matcher(_command);
while(matcher.find()) {
    String name = matcher.group(1);
    System.out.println(name);
}

答案 1 :(得分:0)

Pattern pattern = Pattern.compile("_.*(\\s|\\n)");
Matcher matcher = pattern.matcher(_command);

// Find all matches
while (matcher.find()) {
  // Get the matching string
  String match = matcher.group();
}    

[A-Z]+很好

如果您想让代码告诉我

答案 2 :(得分:0)

[A-Z]+而言,它适用于拉丁语输入。 \p{Upper}+

也是如此

如果您需要支持更宽泛的字符集,请考虑\p{Lu}+,它将匹配任何大写字母unicode字符。

Pattern的javadoc很棒! http://download.oracle.com/javase/6/docs/api/java/util/regex/Pattern.html

答案 3 :(得分:-1)

如果使用Java正则表达式为_.*(\s|\n),则必须将其写为_.*(\\s|\\n)

<强>更新

结果组是括号内正则表达式的那些部分。所以目前只获得最后一个空格或换行符。

试试这个正则表达式:

(_.*\\s+)