2013-07-23 30 views
3

我學習正則表達式,並試圖做到以下幾點:的字母數字組成的Python正則表達式

下面是一系列的字母數字組成的格式。它從4位開始,後跟2個空格,後跟8個數字,後跟1個空格,後跟8個數字,後跟1個空格,後面是8個數字,後面跟着單個空格,後面跟着8個數字,後面跟着一個空格,後面跟着一個OR欄。

FFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF | 

或書面的更清楚:

FFFF[space][space]FFFFFFFF[space]FFFFFFFF[space]FFFFFFFF[space]FFFFFFFF[space]| 

我首先需要在其中找到與00A3開頭的文件的正確路線。然後,我需要拔出我已經與使用陷害位組:

p = re.compile('00A3 ') # search for 00A3[space][space] 
r = re.compile(???)  # search for desired 8 digit groups 
q = re.compile(\[SECTION2\]) 

dataString = inFile.next() # 00A3 388A63FF 00000DF1 52984731 FF989ACB 
while not q.match(dataString) # look for [SECTION2] line in file. This means we passed where 00A3 would have been so it must not be here. 
    if p.match(dataString): 
     numbers = r.findall(dataString) # numbers = [388A63FF, 00000DF1, 52984731, FF989ACB] 
     break 
    dataString = inFile.next() # get next line to check 

這應該給我作進一步處理號碼列表。我只是不知道如何編寫正則表達式,將找到只有4個8個字母數字與空格分隔。我的想法是尋找8個字母數字,前面有一個空格,後面有一個空格,但是會導致問題,看起來如何?

我看着前方,看後面的選項,但我感到困惑。

我對此仍然很陌生,特別是在Python中,所以我願意提供更好的實現建議。

謝謝!

回答

2

您可以對單個8位數組使用一個正則表達式,然後在一行中查找所有匹配項。

line = #string 

regex = re.compile(r' (\w{8})') 

groups = regex.findall(line) #gives a list of the matches in order of appearance 
+0

這工作得很好。我對其他建議有一些問題。感謝您使用正則表達式的幫助! – radensb

1

你的確可以使用lookarounds

(?<=\d{4}\s{2})(\d{8}\s){4}(?=[\s|]) 
+0

您可能需要使用'[^ \ W_]',而不是'\ D' – HamZa

+0

雖然我懷疑他會想的'\ d改變{4}''到或00A3'任何文字串他需要使用'[\ dA-F]'或者其他的方法。 – Dan

0

重:不同的實現

all_numbers =[] 
with open('input','r') as my_file: 
    for line in my_file: 
     line = line.split() 
     if line[0] == "00A3": 
      numbers = line[1:5] 
      all_numbers.append(numbers) 

numbers看起來像['388A63FF', '00000DF1', '52984731', 'FF989ACB']all_numbers僅僅是一個發現的號碼清單。

1

如果您正在使用的findAll,你應該確定與

\w{8}

這一切是8個位數的十六進制數字匹配。

相關問題