GustyWind
GustyWind

Reputation: 3036

Help in writing a Regular expression for a string

Hi please help me out in getting regular expression for the following requirement

I have string type as

String vStr = "Every 1 nature(s) - Universe: (Air,Earth,Water sea,Fire)";
String sStr = "Every 1 form(s) - Earth: (Air,Fire) ";

from these strings after using regex I need to get values as "Air,Earth,Water sea,Fire" and "Air,Fire"

that means after

String vStrRegex ="Air,Earth,Water sea,Fire";
String sStrRegex ="Air,Fire";

All the strings that are input will be seperated by ":" and values needed are inside brackets always

Thanks

Upvotes: 0

Views: 144

Answers (6)

dogbane
dogbane

Reputation: 274532

Ask yourself if you really need a regex. Does the text you need always appear within the last two parentheses? If so, you can keep it simple and use substring instead:

String vStr = "Every 1 nature(s) - Universe: (Air,Earth,Water sea,Fire)";

int lastOpeningParens = vStr.lastIndexOf('(');
int lastClosingParens = vStr.lastIndexOf(')');
String text = vStr.substring(lastOpeningParens + 1, lastClosingParens);

This is much more readable than a regex.

Upvotes: 2

Kerrek SB
Kerrek SB

Reputation: 476970

The regular expression would be something like this:

: \((.*?)\)

Spelt out:

Pattern p = Pattern.compile(": \\((.*?)\\)");
Matcher m = p.matcher(vStr);
// ...
String result = m.group(1);

This will capture the content of the parentheses as the first capture group.

Upvotes: 4

Aziz Shaikh
Aziz Shaikh

Reputation: 16524

Try this regex:

.*\((.*)\)

$1 will contain the required string

Upvotes: 1

Thomas
Thomas

Reputation: 88707

If you have each string separately, try this expression: \(([^\(]*)\)\s*$

This would get you the content of the last pair of brackets, as group 1. If the strings are concatenated by : try to split them first.

Upvotes: 2

Chris
Chris

Reputation: 10328

Try the following:

\((.*)\)\s*$

The ending $ is important, otherwise you'll accidentally match the "(s)".

Upvotes: 2

Fabian Barney
Fabian Barney

Reputation: 14549

I assume that there are only whitespace characters between : and the opening bracket (:

Pattern regex = Pattern.compile(":\\s+\\((.+)\\)");

You'll find your results in capturing group 1.

Upvotes: 1

Related Questions