我正在从文件中解析文本并尝试查看时间。我首先需要检查文本中是否有时间。文本中唯一一致的模式是所有时间均表示为 1 或 2 位数字:2 位数字。我写了一些java代码来看看是否能发现我正在查看的字符串中有一次或多次。
String timePattern = "\\d\\d?:\\d\\d";
if(textWithTime.matches(timePattern)){
System.out.println("MATCH");
} else {
System.out.println("NO MATCH");
}
然而,当我的字符串 textWithTime 等于“06:45/07:52/10:27”或“发生于 06:22”时,我被告知没有匹配项。如何检查我的文本中是否包含时间模式?
最佳答案
matches
检查整个字符串是否与所使用的正则表达式匹配,并且由于只能匹配此正则表达式的一部分,因此您将得到 false
作为结果。
解决方法是在正则表达式的开头和结尾添加 .*
,以使其匹配匹配子字符串之前或之后的部分。
textWithTime.matches(".*\\d\\d?:\\d\\d.*");
但是这个解决方案必须迭代字符串的所有字符来评估它。
更好的方法是使用 Matcher
类中的 find()
方法,该方法将在第一次匹配后停止迭代(或者在情况下返回 false
当找不到匹配的正则表达式时)。
Pattern p = Pattern.compile("\\d\\d?:\\d\\d");
Matcher m = p.matcher(textWithTime);
if (m.find()){
System.out.println("MATCH");
} else {
System.out.println("NO MATCH");
}
关于Java:检查字符串中是否有1次或多次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23435430/