2013-06-26 39 views
1

我試圖re.split得到BCF#,#BTS和LAC,CI從日誌與報頭和規則的結構內:蟒蛇re.split先行模式

================================================================================== 
RADIO NETWORK CONFIGURATION IN BSC: 
                 E P B 
             F     T R C D-CHANNEL BUSY 
         AD OP   R ET- BCCH/CBCH/ R E S O&M LINK HR FR 
LAC CI   HOP ST STATE FREQ T PCM ERACH  X F U NAME ST 
                     /GP 
===================== == ====== ==== == ==== =========== = = == ===== == === === 

BCF-0010 FLEXI MULTI U WO         2 LM10 WO 
10090 31335 BTS-0010 U WO            0 0 
KHAKHAATT070D BB/- 
                       7 
       TRX-001 U WO  779 0 1348 MBCCH+CBCH P 0 
       TRX-002 U WO  659 0 1348     1 
       TRX-003 U WO  661 0 1348     2 
       TRX-004 U WO  670 0 1348     0 
       TRX-005 U WO  674 0 1348     1 
10090 31336 BTS-0011 U WO            0 0 
KHAKHAATT200D BB/- 
                       7 
       TRX-006 U WO  811 0 1348 MBCCH+CBCH P 2 
       TRX-009 U WO  845 0 1349     2 
       TRX-010 U WO  819 0 1349     0 
       TRX-011 U WO  823 0 1349     1 
       TRX-012 U WO  836 0 1349     2 
10090 31337 BTS-0012 U WO            0 0 
KHAKHAATT340D BB/- 
                       5 
       TRX-013 U WO  799 0 1349 MBCCH+CBCH P 0 
       TRX-014 U WO  829 0 1349     1 
       TRX-017 U WO  831 0 1302     2 
       TRX-018 U WO  834 0 1302     1 
       TRX-019 U WO  853 0 1302     0 
       TRX-020 U WO  858 0 1302     2 
       TRX-021 U WO  861 0 1302     1 

BCF-0020 FLEXI MULTI U WO         0 LM20 WO 
10090 30341 BTS-0020 U WO            0 0 
KHAKHABYT100G BB/- 
                       1 
       TRX-001 U WO  14 0 1856 MBCCH+CBCH P 0 
       TRX-002 U WO  85 0 1856     1 
10090 30342 BTS-0021 U WO            0 0 
KHAKHABYT230G BB/- 
                       1 
       TRX-003 U WO  4 0 1856 MBCCH+CBCH P 2 
       TRX-004 U WO  12 0 1856     0 
10090 30343 BTS-0022 U WO            0 0 
KHAKHABYT340G BB/- 
                       1 
       TRX-005 U WO  20 0 1856 MBCCH+CBCH P 1 
       TRX-006 U WO  22 0 1856     2 
10090 30345 BTS-0025 U WO            0 0 
KHAKHABYT100D BB/- 
                       5 
       TRX-007 U WO  793 0 1856 MBCCH+CBCH P 0 
       TRX-008 U WO  851 0 1856     1 
       TRX-009 U WO  834 0 1857     2 
       TRX-010 U WO  825 0 1857     1 
10090 30346 BTS-0026 U WO            0 0 
KHAKHABYT230D BB/- 
                       4 
       TRX-011 U WO  803 0 1857 MBCCH+CBCH P 2 
       TRX-012 U WO  860 0 1857     0 
       TRX-013 U WO  846 0 1857     1 
       TRX-014 U WO  844 0 1857     2 
       TRX-015 U WO  828 0 1857     0 
       TRX-016 U WO  813 0 1857     1 
10090 30347 BTS-0027 U WO            0 2 
KHAKHABYT340D BB/- 
                       5 
       TRX-017 U WO  801 0 1352 MBCCH+CBCH P 2 
       TRX-018 U WO  857 0 1352     0 
       TRX-019 U WO  840 0 1352     1 
       TRX-020 U WO  838 0 1352     0 
       TRX-021 U WO  836 0 1352     1 
       TRX-022 U WO  823 0 1352     2 
       TRX-023 U WO  821 0 1352     0 
       TRX-024 U WO  817 0 1352     1 

======================================================================================= 

與代碼:

def GetTheSentences(infile): 
    with con: 
     cur = con.cursor() 
     cur.execute("DROP TABLE IF EXISTS eei") 
     cur.execute("CREATE TABLE eei(BCF INT, BTS INT PRIMARY KEY) ") 
    with open(infile) as fp: 
     for result_1 in re.split('BCF-', fp.read(), flags=re.UNICODE): 
      BCF = result_1[:4] 
      for result_2 in re.compile("(?=BTS-)").split(result_1):  
       rec = re.search('TRX-',result_2) 
       if rec is not None: 
        BTS = result_2[4:8] 
        print BCF + "," + BTS 

我需要使用正則表達式前瞻和拆分result_3爲每個TRX拆分result_1到BTS相關部分,包括「BTS-」(「10090 31335 BTS-0010」)之前的第13個字符,但沒有成功。

請支持!

回答

6

Python的re.split()不會在零長度匹配上拆分。

因此re.compile("(?=BTS-)").split(result_1)永遠不會拆分你的字符串。您需要找到沒有re.split()的解決方案或使用新的regex module

+0

但是BTS = result_2 [4:8]從BTS-xxxx獲得BTS ID並且它看起來像「BTS-」已經在result_2中被「(?= BTS-)」留下。你能否指定零長度匹配的含義? – user2523580

+0

'(?= BTS-)'匹配兩個字符之間的*位置*,具體地說,就是字符串「BTS-」之前的位置。但它不符合任何實際的字符,這就是爲什麼比賽總是零字符長的原因。這是Python正則表達式引擎的一個怪癖,並不認爲這是一個有效的分割點。其他正則表達式引擎沒有這個限制。 –

+1

如果只有你解釋了*如何使用'regex'模塊... – Superbest