我有一个字符串"abcde-abc-db-tada_x12.12_999ZZZ_121121.333"
我想要的结果应该是999ZZZ
我曾尝试使用:
private static String getValue(String myString) {
Pattern p = Pattern.compile("_(\\d+)_1");
Matcher m = p.matcher(myString);
if (m.matches()) {
System.out.println(m.group(1)); // Should print 999ZZZ
}
else {
System.out.println("not found");
}
}
5条答案
按热度按时间ar7v8xwq1#
如果您希望继续使用基于正则表达式的方法,请使用以下模式:
这将贪婪地消耗掉倒数第二个underscrore,然后再消耗并捕获
9999ZZZ
。代码示例:
∮ ∮ ∮ ∮
mbzjlibv2#
使用字符串拆分?
dtcbnfnu3#
除了
split
之外,您还可以使用substring
:或者,
jucafojl4#
获取最后两个下划线字符之间的文本,首先需要找到最后两个下划线字符的索引,使用
lastIndexOf
非常容易:这比任何使用regex的解决方案都要快,包括使用
split
。8ulbf1ek5#
由于我在第一次阅读时误解了有问题的代码的逻辑,同时使用正则表达式出现了一些很好的答案,这是我使用String类中包含的一些方法的尝试(它引入了一些变量,只是为了让阅读更清楚,当然可以用更短的方式编写):