首页 > 解决方案 > 正则表达式从给定字符串解析百分比范围

问题描述

我试图形成应该能够从任何字符串中提取百分比范围的正则表达式。例如 - 阿迪达斯30-60%的鞋类折扣,

我可以使用 - 从此字符串中提取 60% \\b\\d+(?:%|percent\\b),但是,这应该适用于56%30-60%

任何帮助都会得到帮助。

标签: javaregex

解决方案


您可以使用

\b(?:\d+[—–-])?\d+(?:%|percent\b)

有了分数支持,它可能看起来像

\b(?:\d+(?:\.\d+)?[—–-])?\d+(?:\.\d+)?(?:%|percent\b)

请参阅正则表达式演示详情

  • \b- 单词边界
  • (?:\d+(?:\.\d+)?[—–-])?- 一个或多个数字的可选序列,后跟一个或多个数字的可选序列,.然后是破折号
  • \d+(?:\.\d+)?- 一个或多个数字后跟一个可选序列.和一个或多个数字
  • (?:%|percent\b)-%percent后跟单词边界。

查看Java 演示

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()); 
        } 
    }
}

输出:

56%
30-60%

推荐阅读