当前位置: 首页 > 知识库问答 >
问题:

Regex查找一个数字是否在一个范围内,例1,3,10-15,17[重复]

仲孙宇定
2023-03-14

任何解决这个问题的帮助都是感激的。

谢谢

====根据收到的答案修改。====

create or replace and compile java source named "RegExp" as
import java.util.HashSet;
import java.util.Set;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class RegExp
{
  private static  Pattern P = Pattern.compile("(\\d+)-(\\d+)");

  public static int inRange (int p1, java.lang.String p2)
  {
    int iReturn = -1;
         int input;

         String[] sa;
         sa = p2.split(",");
         Set<Integer> is = new HashSet<Integer>();

         input = p1;

        for ( String s : sa)
        {
             Matcher m = P.matcher(s);
            if (m.find())
            {
                 int start = Integer.parseInt(m.group(1));
                 int end = Integer.parseInt(m.group(2));
                for (int i = start; i <= end; i++)
                {
                    is.add(i);
                }
            }
            else
            {
                is.add(Integer.parseInt(s));
            }
        }

        if (is.contains(input))
        {
           // System.out.format("Found %d in the set %s", input, is);
            iReturn = 1;
        }
        else
        {
           // System.out.format("Didn't find %d in set %s", input, is);
            iReturn = 0;
        }
        return iReturn;

  }

};
CREATE OR REPLACE FUNCTION InRange (p1  IN  number, p2  IN  VARCHAR2) RETURN NUMBER
AS LANGUAGE JAVA 
NAME 'RegExp.inRange (int, java.lang.String) return int';
SELECT InRange(13,'1,3,10-15,17') FROM   DUAL;
SELECT InRange(6,'1,3,10-15,17') FROM   DUAL;
public static int inRangeString (java.lang.String p1, java.lang.String p2)
  {
      int iReturn = -1;


      String[] sa;
      sa = p2.split(",");

      Set<String> is = new HashSet<String>();


      for ( String s : sa)
        {
                 is.add(s);
        }

       if (is.contains(p1)) {
          iReturn = 1;  
              // value is valid  
          } else {  
                    iReturn = 0;
              // value is invalid  
          }  

       return iReturn;
  }

共有1个答案

酆华皓
2023-03-14

但他们绝不是唯一的部分。正则表达式用于模式匹配,而不是用于执行您需要的任意逻辑。

import javax.annotation.Nonnull;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

import com.google.common.collect.Range;
import com.google.common.collect.RangeSet;
import com.google.common.collect.TreeRangeSet;

public class Q25004732
{
    private static final Pattern RANGE = Pattern.compile("(?i)^(?=[a-z]+-[a-z]+$|\\d+-\\d+$)([a-z\\d]+)-([a-z\\d]+)$");

    public static void main(final String[] args)
    {
        final String[] sa = "1,3,10-15,17,A,b,XX-ZZ,z".split(",");
        final RangeSet<String> rs = TreeRangeSet.create();
        for (final String s : sa)
        {
            final Matcher m = RANGE.matcher(s);
            if (m.find())
            {
                rs.add(Range.closed(m.group(1), m.group(2)));
            }
            else
            {
                rs.add(Range.closed(s, s));
            }
        }
        report("13", rs);
        report("A", rs);
        report("XY", rs);
        report("c", rs);
        report("42", rs);
    }

    private static void report(@Nonnull final String input, @Nonnull final RangeSet<String> rs)
    {
        if (rs.contains(input))
        {
            System.out.format("Found %s in the set %s", input, rs);
        }
        else
        {
            System.out.format("Didn't find %s in set %s", input, rs);
        }
        System.out.println();
    }
}
Found 13 in the set [[1‥1], [10‥15], [17‥17], [3‥3], [A‥A], [XX‥ZZ], [b‥b], [z‥z]]
Found A in the set [[1‥1], [10‥15], [17‥17], [3‥3], [A‥A], [XX‥ZZ], [b‥b], [z‥z]]
Found XY in the set [[1‥1], [10‥15], [17‥17], [3‥3], [A‥A], [XX‥ZZ], [b‥b], [z‥z]]
Didn't find c in set [[1‥1], [10‥15], [17‥17], [3‥3], [A‥A], [XX‥ZZ], [b‥b], [z‥z]]
Didn't find 42 in set [[1‥1], [10‥15], [17‥17], [3‥3], [A‥A], [XX‥ZZ], [b‥b], [z‥z]]

谷歌番石榴

<dependency>
    <groupId>com.google.guava</groupId>
    <artifactId>guava</artifactId>
    <version>[17.0,)</version>
</dependency>

芬德布格斯

<dependency>
    <groupId>com.google.code.findbugs</groupId>
    <artifactId>findbugs</artifactId>
    <version>[3.0.0,)</version>
</dependency>
 类似资料:
  • 以下代码根据变量所处的范围,为变量指定特定值。 这工作得很好,但是我想知道是否有一种更Pythonic的方法来编写下面的条件块。

  • 在应用程序脚本中是否有一种简单的方法可以查找某个范围内的下一个空行,例如,我希望如下所示: 返回B2:D范围内的下一行空行,以便返回第4行 其他行(如A行 我正在尝试从另一个工作表(或选项卡)写入下一个空行,该工作表有一个供用户输入数据的输入区域,然后点击按钮,数据将添加到目标页上的空行(数据的第一行!B2:D)

  • 问题内容: 我有点麻烦。我有一项作业,要求我找出第二个圆圈是否重叠,内部是否重叠或两者都不存在。但是,我在检查重叠以及第二个圆是否在第一个圆内时遇到了麻烦。 (使用的变量为x1,x2,y1,y2,r1,r2,距离) 这是我所拥有的: 我担心问题在于重叠和内部检查,但是我无法弄清楚如何正确设置它,因此我可以可靠地检查第二个圆是否在第一个圆的内部。 当我尝试了多种方法时,任何帮助或建议都将不胜感激,但

  • 这是我的密码: 基本上,我正在编写一个程序来计算考试分数,但是首先用户必须输入0-100之间的分数。 如果用户输入的测试分数超出该范围,我希望程序告诉用户重写该数字。我不希望程序以错误结束。我该怎么做?

  • rank ▲ ✰ vote url 41 487 108 705 url 检查一个字符串是否是一个数字 如果一个字符串可以被看做一个数字那么有什么好的方法可以检测出来? 我能想到的方法: def is_number(s): try: float(s) return True except ValueError: return Fals

  • 我正在尝试编写一个素数筛生成器,我将其转换为打印列表,然后在给定范围内打印素数。我很确定我的配对数是正确的,但出于某种原因,我在素数列表中得到了一些非素数的额外值。(我马上发现了这一点,因为我在输出中的最后一个值是3599,这不是素数)。我不确定我是否有某种逻辑错误,所以任何帮助都很棒。