我希望能够找到这种模式'_*'
含义以'_'
开头,以空格或新行结束。
我还有另一个正则表达式,只能找到一个大写字母:[A-Z]+
这是准确的,还是有更好的写作方式?
我使用Java。
答案 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+)