字符串大于小于对正则表达式的测试

时间:2013-10-25 19:57:55

标签: python regex

我正在寻找按字母顺序排序的字符串列表与使用python的正则表达式之间的匹配。

正则表达式相对简单,类似于“block_number_ [0-9] +”,表示“block_number_”,后跟任何表示数字的字符串,例如“block_number_1234”。

除了按字母顺序排序外,列表中的字符串结构非常少;它还包含“block_number_alt567”和“block_no_90210”等条目。

有没有办法测试我在我的正则表达式匹配不再可能的字符串列表中的点数,即一旦我点击block_number_alt567,就没有必要再测试“ block_number_ [0-9] +“?

(最终目标是将相对较长的字符串列表与捕获列表中所有变体的正则表达式列表进行比较;每次不搜索字符串列表的每个元素所带来的性能节省将是显着的在应用程序环境中)。

3 个答案:

答案 0 :(得分:2)

关于正则表达式的好处是你可以使用一个正则表达式匹配许多模式。以下正则表达式匹配所有示例模式。

block_n(o|(um(ber)?))_\w*\d+

答案 1 :(得分:0)

您可以按字母顺序比较Python字符串&lt;和&gt;。例如,"block_number_0" < "block_number_alt567"为True。

如果我理解正确,那么您可以停止查看正则表达式是否匹配且字符串是否大于“block_number_0”(或任何其他数字)。

答案 2 :(得分:0)

如果您的列表已排序并且您正在尝试解析条目集,您还可以读取数据(假设您的存储空间足够),然后执行二进制搜索以更有效地查找块,而无需每个处理单独划线。

例如,如果您有以下列表:

block_no_0001
block_no_0023
< n random sorted block_no_ entries>
block_no_9451
block_number_0451
block_number_1582
< m random sorted block_number_... entries>
block_number_9825
block_number_alt1234

然后,您将文件中的所有条目读入列表:

list = []
file = open('mytestfile.txt', 'r')
for line in file.readlines()
    list.append(line)
listlen = len(list)

然后,您可以使用二进制搜索在列表中搜索,以查找所有条目的上限和下限,而无需尝试匹配每一行。然后只需处理不同的块集,而不必分别匹配索引之间的所有条目。

因此,例如,您最终可能会将某些内容存储在可能是这样的字典中:

{'block_number[0-9]{0,3}': 
     {'high': 450, 'low': 119}, 
 'block_no[\\w+][0-9]{0,3}': 
     {'high': 452, 'low': 451}, 
 'block_no[0-9]{0,3}': 
     {'high': 118, 'low': 0}
 }

然后,您可以将每个字典条目从“低”吹到“高”并根据需要进行处理。