Hello I have a question about RegEx. I am currently trying to find a way to grab a substring of any letter followed by any two numbers such as: d09.
I came up with the R
How about "[a-z][0-9][0-9]"
? That should find all of the substrings that you are looking for.
There are three errors:
Your expression contains anchors. ^
matches only at the start of the string, and $
only matches at the end. So your regular expression will match "r30"
but not "foo_r30_bar"
. You are searching for a substring so you should remove the anchors.
The matches
should be find
.
You don't have a group 1 because you have no parentheses in your regular expression. Use group()
instead of group(1)
.
Try this:
Pattern pattern = Pattern.compile("[a-z][0-9]{2}");
Matcher matcher = pattern.matcher("sedfdhajkldsfakdsakvsdfasdfr30.reed.op.1xp0");
if(matcher.find()) {
System.out.println(matcher.group());
}
ideone
Matcher Documentation
A matcher is created from a pattern by invoking the pattern's matcher method. Once created, a matcher can be used to perform three different kinds of match operations:
- The matches method attempts to match the entire input sequence against the pattern.
- The lookingAt method attempts to match the input sequence, starting at the beginning, against the pattern.
- The find method scans the input sequence looking for the next subsequence that matches the pattern.
^[a-z]{1}[0-9]{2}$
sedfdhajkldsfakdsakvsdfasdfr30.reed.op.1xp0
as far as i can read this
Maybe if i have more data about your string i can help
EDIT
if you are sure of *number of dots then
change this line
Matcher matcher = pattern.matcher("sedfdhajkldsfakdsakvsdfasdfr30.reed.op.1xp0");
to
Matcher matcher = pattern.matcher("sedfdhajkldsfakdsakvsdfasdfr30.reed.op.1xp0".split("\.")[0]);
note:-
using my solution you should omit the leading ^ for pattern
read this page for Spliting strings
Your regex is anchored, as such it will never match unless the whole input matches your regex. Use [a-z][0-9]{2}
.
Don't use .matches()
but .find()
: .matches()
is shamefully misnamed and tries to match the whole input.
It doesn't match because ^
and $
delimite the start and the end of the string. If you want it to be anywhere, remove that and you will succed.