首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >需要帮助使用Android模式检测车牌号码

需要帮助使用Android模式检测车牌号码
EN

Stack Overflow用户
提问于 2019-01-09 13:48:23
回答 1查看 229关注 0票数 2

我需要在文本中找到一个车牌号码,与下面的模式相匹配("L“代表字母,"D”代表数字):

LLLDDD,LLLDDDD,LLDDDD,DDDDLL

它们之间可以有空间,就像LLL DDD一样。

如果文本仅仅是车牌号码,比如"SS1234“,我有一个很好的方法。

代码语言:javascript
运行
复制
public static boolean plateNumberExist(String target) {
    return Pattern.compile("^([A-Za-z]{3} ?[0-9]{3})?([A-Za-z]{3} ?[0-9]{4})?([A-Za-z]{2} ?[0-9]{4})?([0-9]{4} ?[A-Za-z]{2})?$").matcher(target).matches();
}

但是,如果我添加另一个文本,其车牌号码与下面的代码一样,那么它总是错误的。

代码语言:javascript
运行
复制
if(plateNumberExist("Republic SS1234")){
    showToast("Plate Number Found");
}else{
    showToast("No Plate Number");
}

因此,我用来获取车牌号码的实际代码是下面的代码,但它也不起作用。

代码语言:javascript
运行
复制
String inputString = "Republic SS1234";
Pattern pattern = Pattern.compile("^([A-Za-z]{3} ?[0-9]{3})?([A-Za-z]{3} ?[0-9]{4})?([A-Za-z]{2} ?[0-9]{4})?([0-9]{4} ?[A-Za-z]{2})?$");
Matcher matcher = pattern.matcher(inputString);
if (matcher.find()) {
   String platenumber = inputString.substring(matcher.start(), matcher.end());
                showToast(platenumber);
            } else {
                showToast("No Plate Number Found");
            }

问题在于正则表达式,但我只是不明白它为什么工作,如果它只是一个车牌号码,但如果我有其他文本与车牌号码,它不工作

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-01-09 13:53:10

^$正则表达式分别表示输入的开始和结束。

\\b (单词的开头/结尾)替换它们,它应该能工作。

现场演示

==编辑==

请注意,正则表达式本身可以简化,如果要收集所有匹配项,则应该使用循环。看一下:

代码语言:javascript
运行
复制
String inputString = "Republic SS1234 and ABC 1234";
Pattern pattern = Pattern.compile(
    "(?i)\\b([A-Z]{3} ?[0-9]{3,4}|[A-Z]{2} ?[0-9]{4}|[0-9]{4} ?[A-Z]{2})\\b");
Matcher matcher = pattern.matcher(inputString);
while (matcher.find()) {
    String platenumber = matcher.group(1);
    . . .
}

(?i)的意思是忽略-case,{3,4}的意思是“从3到4”,|的意思是“或”。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54111638

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档