我需要在与以下图案匹配的文本中找到车牌号 (“ 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");
}
问题出在正则表达式上,但是我只是不明白为什么它只有车牌号才能工作,但是如果我有其他带有车牌号的文本就行不通了
答案 0 :(得分:4)
^
和$
的正则表达式符号分别表示输入的开始和结束。
用\\b
(单词的开头/结尾)替换那些单词,它应该可以工作。
==编辑==
请注意,您的正则表达式本身可以简化,如果要收集所有匹配项,则应使用循环。看看:
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”,而|
表示“或”