Suppose I have a string
String s = The | community | office | system | is here to help you with specific coding, algorithm, or language problems.
How can I extract all the words from string s
into a list which is between the pipe delimiter?
So the list should save community, office, system
.
I thought of using the following pattern. Will it work?
Matcher matcher = Pattern.compile("(\|\w+)").matcher(s);
Advertisement
Answer
You can use
|s*(w+)(?=s*|) |s*(.*?)(?=s*|)
See the regex demo and regex #2 demo. Details:
|
– a|
chars*
– zero or more whitespaces(w+)
– Group 1: one or more word chars(.*?)
– any zero or more chars other than line break chars, as few as possible(?=s*|)
– a positive lookahead that matches a location that is immediately followed with zero or more whitespaces and a|
char.
See a Java demo and a Java #2 demo:
String s = "The | community | office | system | is here to help you with specific coding, algorithm, or language problems."; Pattern pattern = Pattern.compile("\|\s*(\w+)(?=\s*\|)"); Matcher matcher = pattern.matcher(s); while (matcher.find()){ System.out.println(matcher.group(1)); } // => community // office // system // The second pattern demo: String s = "The | community section | office section | system section | is here to help you with specific coding, algorithm, or language problems."; Pattern pattern = Pattern.compile("\|\s*(.*?)(?=\s*\|)"); Matcher matcher = pattern.matcher(s); while (matcher.find()){ System.out.println(matcher.group(1)); } // => community section // office section // system section