How is it possible to extract only a time part of the form XX:YY out of a string?
For example – from a string like:
sdhgjhdgsjdf12:34knvxjkvndf, I would like to extract only 12:34.
( The surrounding chars can be spaces too of course )
Of course I can find the semicolon and get two chars before and two chars after, but it is bahhhhhh…..
Advertisement
Answer
You can use this look-around based regex for your match:
JavaScript
x
(?<!d)d{2}:d{2}(?!d)
In Java:
JavaScript
Pattern p = Pattern.compile("(?<!\d)\d{2}:\d{2}(?!\d)");
RegEx Breakup:
JavaScript
(?<!d) # negative lookbehind to assert previous char is not a digit
d{2} # match exact 2 digits
: # match a colon
d{2} # match exact 2 digits
(?!d) # negative lookahead to assert next char is not a digit
Full Code:
JavaScript
Pattern p = Pattern.compile("(?<!\d)\d{2}:\d{2}(?!\d)");
Matcher m = pattern.matcher(inputString);
if (m.find()) {
System.err.println("Time: " + m.group());
}