需要有关使用Android Pattern检测车牌号的帮助

时间:2019-01-09 13:48:23

标签: java regex

我需要在与以下图案匹配的文本中找到车牌号 (“ L”代表字母,“ D”代表数字):

LLLDDD,LLLDDDD,LLDDDD,DDDDLL

它们之间可能有空格,例如LLL DDD

如果文本只是车牌号,例如“ SS1234”,我有这种方法可以正常工作

install.packages("TSA")
library(TSA)
setwd("D:/Data")
site<- read.csv("export.csv")
df<- read.csv(file= "model output-COMO.csv",
           header=TRUE,sep=",")
 #timese<-xts(df$variable,df$Date)
 p <- periodogram(df$variable)

但是,如果我添加另一个带有车牌号的文本,如下面的代码,则该文本始终为假

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();
}

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

if(plateNumberExist("Republic SS1234")){
    showToast("Plate Number Found");
}else{
    showToast("No Plate Number");
}

问题出在正则表达式上,但是我只是不明白为什么它只有车牌号才能工作,但是如果我有其他带有车牌号的文本就行不通了

1 个答案:

答案 0 :(得分:4)

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

\\b(单词的开头/结尾)替换那些单词,它应该可以工作。

Live demo

==编辑==

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

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)表示忽略大小写,{3,4}表示“从3到4”,而|表示“或”