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

如何从这个正则表达式生成所有可能的数字?[副本]

厉熠彤
2023-03-14

我想得到正则表达式所有可能值的列表。

输入:

2W
9WW
7W0W3

其中,W可以是0到9之间的任意数字。i、 e.<代码>W=[0-9]

输出:

20,21,22,....29
900,901,...910,911,...999
70003,70013,70023,...71003,72003,...79093

我所做的:

我正在使用Java,并决定创建一个整数数组列表。

我创建了一个方法ArrayList

ArrayList<Integer> getNumbers(String regex){

ArrayList<Integer> fullList = new ArrayList<Integer>();

char[] cArray = regex.toCharArray(); //converted the string into a character array.

   for(int i=1;i<cArray.length;i++) {

       if(cArray[i] == 'W') {              

           for(int j=0;j<10;j++) {
               //I'm not sure what goes here
              fullList.add(the number with 'w' at this index replaced by 'j');
           }               
       }

   }
return fullList;
}

有没有更好的方法或库函数来生成所有这些数字?

我怎样才能做到这一点?


共有2个答案

支彭亮
2023-03-14

最好将输入字符串称为“模式”,而不是“正则表达式”。此外,最好创建一个“虚拟”列表来按需生成字符串。这是示例实现:

public static List<String> getNumbers(String pattern) {
    final char[] chars = pattern.toCharArray();
    int size = 1;
    for(char ch : chars)
        if(ch == 'W') {
            if(size == 1_000_000_000)
                throw new IllegalArgumentException("Too many 'W' to fit the list");
            size*=10;
        }
    final int finalSize = size;
    return new AbstractList<String>() {

        @Override
        public String get(int index) {
            char[] res = chars.clone();
            for(int i=res.length-1; i>=0; i--) {
                if(res[i] == 'W') {
                    res[i] = (char) ('0'+(index % 10));
                    index/=10;
                }
            }
            return new String(res);
        }

        @Override
        public int size() {
            return finalSize;
        }
    };
}

首先,我们计算字符数,并相应地计算目标列表大小。然后,我们返回一个抽象列表的实现,对于给定的列表索引,它用索引除以10的余数替换了W符号。此列表不占用内存,它仅在您请求时生成字符串。如果要获取此类列表的硬拷贝,可以使用new ArrayList

年运珧
2023-03-14

这不是一个基于正则表达式的问题,但从算法角度来看,您可以执行以下操作:

    null

如果您正在寻找一个通用正则表达式来包装所有情况,您可以使用正则表达式,例如(w)w在捕获组中),那么您需要首先访问匹配组的位置并将它们替换为组合项(i, j, k,...)。

 类似资料:
  • 正则表达式如何匹配出这个字符串'calc(100vh - 420px)'中的数字420

  • 问题内容: 是的,您没看错。我需要能够从正则表达式 生成 随机文本的内容。因此,文本应该是随机的,但要与正则表达式匹配。看来它不存在,但我可能是错的。 仅举一个例子:该库将能够以“ ”作为输入,并生成诸如以下示例: abc abbbc bac 等等 更新:我自己创建了一些东西:Xeger。查看http://code.google.com/p/xeger/。 问题答案: 我刚刚创建了一个库来进行此操

  • 问题内容: 我知道通过使用Xeger,我们可以获得指定模式的随机值。 我想知道是否有一种方法可以返回指定正则表达式的所有有效字符串。例如,对于模式:,我们可以得到所有的值来。 谢谢 编辑: 在这里,我们不考虑+和*等无限输出;我们如何获得有限正则表达式的所有值? 最后编辑: 感谢大家!最后,我不会考虑所有可能的值,因为可能有数千个。我限制一个特定的数字作为减少数量的值的数量。 问题答案: 由于正则

  • 我知道通过使用Xeger,我们可以获得指定模式的随机值。 我想知道有没有办法返回指定正则表达式的所有有效字符串。例如,对于模式:,我们可以获取从到的所有值。 谢谢 编辑: 这里我们不考虑像和*这样的无限输出;如何获得有限正则表达式的所有值? 上次编辑: 谢谢大家!最后,我没有考虑所有可能的值,因为可能有数千个。我限制一个特定的数字作为值的数量,以减少数量。

  • 问题内容: 这是一系列正则表达式教育文章的一部分,是对嵌套引用的概念的简要介绍。 前几个三角形数字是: 有很多方法可以检查数字是否为三角形。有一种使用正则表达式的有趣技术,如下所示: 给定 n ,我们首先创建一个长度为 n 的字符串,并填充相同的字符 然后,我们将此字符串与模式匹配 __当且仅当此模式与字符串匹配时, n 为三角形 以下是一些片段,表明它可以在多种语言中运行: PHP(在ideon

  • 我试图用python及其正则表达式找到所有可能的单词/标记对或其他嵌套组合。 寻找: 我认为正则表达式也可以找到嵌套的括号单词/标记对,但它不返回它们。我该怎么做?