我正在尝试检测字符串中的年份。我看过很多其他先前提出的问题,但是找不到解决随机格式的问题。假设我正在寻找2001福特Explorer的零件,并且我想过滤结果以删除那年不是的零件。我可能会遇到以下年份格式。我以为String.contains(“ 01”)可以,但是也可以匹配2010,并且无法解决我搜索的年份根本不在字符串中,而是介于其他年份之间的问题。一个正则表达式是否可以涵盖所有这些情况?
public Boolean filterResult(String str, String expectedYear){
if(str.contains("expectedYear") && (str.indexOf(expectedYear)-1 !=2 ||
str.indexOf(expectedYear) == 0){
return true;
}else{
return false;
}
}
如果2010返回false。如果前一位数字是空格或破折号,并且ExpectedYear落在字符串的开头,则返回true。 没有提及预期的两年之间。
答案 0 :(得分:0)
您可以使用此正则表达式:
(\d{4}|\d{2}-\d{2}|\d{2})
但是,这只会检测模式是否匹配。您将需要添加更多逻辑以确保其有效。
在以下位置进行检查:https://rubular.com
答案 1 :(得分:0)
可以用Java如下完成
Pattern patt = Pattern.compile("(?:Fits )?(97|1997)?(?:[^0-9]+)?(01|02|200[12]) Ford Explorer.");
// add code to iterate lines
String s = "Fits 1997-2002 Ford Explorer.";
Matcher m = patt.matcher(s);
if(m.matches()){
if(m.group(1) != null){
//validate year 1997
}
if(m.group(2) != null){
//validate year 2002
}
}