2016-09-12 61 views
-2

我遇到了創建代碼的問題,該代碼將在模式不匹配時計數,並且一旦該模式具有使用正則表達式的匹配,將重置爲0。我將列出一個文件的例子,並試圖展示我期待的功能。無論文件中有多少匹配,我都會收到-1。我也不確定數字應該如何在文本文件中格式化。我無法讓我的代碼進行計數並重置爲零

regEx56「定位,在它有56不分地點的所有數字)256 526 065 regEx57 「同爲56,但使用57而不是」

p3text file.  python count: 56  57 
107         -1  -1 
328         -2  -2 
156         0  -3 
725         -1  0 

這裏是我的代碼:

import re 

my_p3text = open("p3text.txt", "r") 
p3data = my_p3text.read() 


regEx56 = str(re.findall(r'\b[0-4]*(?:5[0-4]?6|6[0-4]?5)[0-4]*\b',p3data)) 
regEx57 =str(r'\b[0-4]*(?:5[0-4]?7|7[0-4]?5)[0-4]*\b',p3data) 



for line in my_p3text: 
    match=regEx56.search(line) 
    count = 0 
    print (match) 


else: 
    count = -1 
print (count) 
+0

到底是什麼模式。你能舉個例子嗎? –

+0

所以數字列表是:107 328 156 725.我想跟蹤數字56和75的正則表達式捕捉它們。但計數不起作用。 r'\ b [0-4] *(?: 5 [0-4]?6 | 6 [0-4]?5)[0-4] * \ b'= 3位數字中56的任意組合和'\ b [0-4] *(?:5 [0-4]?7 | 7 [0-4]?5)[0-4] * \ b' – rj23

回答

0

首先:

for line in my_p3text: 
    match=regEx56.search(line) 
    count = 0 
    print (match) 


else: 
    count = -1 

意味着,當沒有更多的行,它會打印-1,這總是。在for循環中放置一個if-else語句。

此外,你的號碼只能以0-4,5,6或7開頭;在6-7和5之間可能爲0-4(反之亦然)。它也以與它開始的方式類似的方式結束。

如果這是你想要的,那麼它的罰款,否則可以試試...

(\d*((5\d*?[67])|([67]\d*?5))\d*) 
相關問題