【发布时间】:2016-08-30 13:05:41
【问题描述】:
输入
45697B2
正则表达式模式:
static Pattern kindCodePattern = Pattern.compile("([a-zA-z])", Pattern.CASE_INSENSITIVE);
我在做什么
从输入中获取最后两个字符并匹配单个字符范围 a-z,如果找到删除最后两个字符,否则分配一个空
kindCode = input.substring(Math.max(input.length() - 2, 0));
matcher = kindCodePattern.matcher(kindCode);
Boolean isAvailableKindCode = matcher.find();
if (isAvailableKindCode) {
input = input.substring(0, input.length() - 2);
} else {
kindCode = "";
}
但在某些情况下,我只想检查最后一个字符,比如我的输入是 45697B 然后
kindCode = input.substring(Math.max(input.length() - 1, 0));
怀疑:
如何在一次匹配中同时匹配这两种情况?有可能吗?
或者我的模式有什么变化?
【问题讨论】:
-
我还没有测试过:我会尝试使用类似 "[A-Za-z].?$" 来匹配行尾可能后跟任何字符的字母。除了任何错误外,这应该与您的两个示例中的“B2”和“B”匹配。可以使用
.group()从匹配器中取出实际匹配的子串。