I was trying to form regex which should be able to extract percentage range from any String. For example- Adidas 30-60% Off on footwear,
I am able to extract 60% from this string using - \\\\b\\\\d+(?:%|percent\\\\b)
, But, this should work for both 56% as well as 30-60% .
Any help will be appriciaed.
You can use
\b(?:\d+[—–-])?\d+(?:%|percent\b)
With fractions support it may look like
\b(?:\d+(?:\.\d+)?[—–-])?\d+(?:\.\d+)?(?:%|percent\b)
See the regex demo . Details :
\\b
- a word boundary (?:\\d+(?:\\.\\d+)?[—–-])?
- an optional sequence of one or more digits followed with an optional sequence of .
and one or more digits and then a dash\\d+(?:\\.\\d+)?
- one or more digits followed with an optional sequence of .
and one or more digits(?:%|percent\\b)
- %
or percent
followed with a word boundary. See a Java demo :
import java.util.regex.*;
class Test
{
public static void main (String[] args) throws java.lang.Exception
{
String s = "both 56% as well as 30-60%.";
Pattern pattern = Pattern.compile("\\b(?:\\d+[—–-])?\\d+(?:%|percent\\b)");
Matcher matcher = pattern.matcher(s);
while (matcher.find()){
System.out.println(matcher.group());
}
}
}
Output:
56%
30-60%
public static void main(String[] args) {
String line = "Adidas 30-60% Off";
String pattern = "\\b[\\d|-]+(?:%|percent\\b)";
Pattern r = Pattern.compile(pattern);
Matcher m = r.matcher(line);
if (m.find( )) {
System.out.println("Found value: " + m.group(0) );
} else {
System.out.println("NO MATCH");
}
}
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.