正则表达式匹配输入数字字符串的最大值

时间:2017-05-05 14:45:39

标签: regex

我有传入的输入条目。 像这些

750
1500
1
100
25
55

并且有一个如下所示的查找表

25
7
5
75

所以当我收到我的第一个条目时,在这种情况下它是750.所以这将查找查找条目表将尝试匹配从左到右具有最大匹配的字符串。

因此对于750,最大匹配情况为75。

我在想,如果我们能为这种情况编写一个正则表达式,那是否可能。因为如果我选择使用startsWith java函数它也可以得到7的输出。

由于输入条目将逐个来自文本文件,并且所有查找条目都存在于文件不同的文本文件中。

我使用的是java语言。

我可以知道如何为这种风格编写正则表达式吗?

2 个答案:

答案 0 :(得分:0)

如果您计划使用Java(或其他任何语言,正则表达式太复杂 - 不可能? - 对于一个完全一般的情况),只需使用startsWith。假设查找表已存储在数组中,current是您正在查找的字符串:

int max = "";
for(String currentLookUp : lookUpTable) {
    if (current.startsWith(currentLookUp) && currentLookUp.length() > max.length())
        max = currentLookUp;
}

你可以通过将最长的查找表排序为最短并且在第一次匹配时打破来改善这一点。在任何情况下,这个解决方案都很慢,任何针对此问题的搜索解决方案(正则表达式)在这里效率都不高。更好地了解trie是什么!用Google搜索了java tutorial

答案 1 :(得分:0)

(?: 25 | 5 | 75? )

有免费软件可以自动为您制作完整的正则表达式 只需将输出正则表达式放入文本文件并加载它。

如果您的值没有太大变化,这是一种非常快速的查找方式 如果确实发生了变化,请生成另一个。

这里有一个完全成熟的特里斯,它永远不会超过8个 匹配的步骤。

我刚做过的那个http://imgur.com/a/zwMhL
应用screenshot

即使是175,000 Word Dictionary也不会超过8步。

应用程序内部最初从输入中生成三元树 然后将其转换为完整的正则表达式。