簡體   English   中英

針對正則表達式的字符串大於小於測試

[英]String greater-than-less-than Tests Against a Regular Expression

我正在尋找按字母順序排序的字符串列表和使用python的正則表達式之間的匹配項。

正則表達式相對簡單,類似於“ block_number_ [0-9] +”,表示“ block_number_”,后跟表示數字的任何字符串,例如“ block_number_1234”。

除了字母排序外,列表中的字符串幾乎沒有結構。 它還包含“ block_number_alt567”和“ block_no_90210”之類的條目。

有沒有一種方法可以測試何時不再通過字符串列表中的正則表達式匹配點,即一旦我命中了block_number_alt567,就無需再測試與“ block_number_ [0 -9] +“?

(最終目標是將比較長的字符串列表與捕獲列表中所有變體的正則表達式列表進行比較;在每次應用中不搜索字符串列表的每個元素所帶來的性能節省將非常重要。環境)。

關於正則表達式的妙處在於,您可以使用一個正則表達式來匹配許多模式。 以下正則表達式與您的所有示例模式均匹配。

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

您可以按字母順序將Python字符串與<和>進行比較。 例如, "block_number_0" < "block_number_alt567"為True。

如果我對您的理解正確,那么您可以停止查找正則表達式是否不匹配並且字符串大於“ block_number_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}
 }

然后,您可以從“低”到“高”瀏覽每個字典條目,並根據需要進行處理。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM