2016-07-04 69 views
-4
+1511 
0716 
+4915 CZECHY 
+3815/0616 PORT MO, 
AO 
_3615 USA *, SUV run on flat 
+4515 PORT SUV 
*, SUV 
+3215 USA *, SUV 
+4414 
+4815 NIEM 
_0616 NIEM */MO 
+2115 NIEM J 

我需要得到的只有前4位Python的正則表達式中刪除所有字符,除了4個七段

+ NIEM

請幫助。

+0

我使用了're.sub(r'(\ + | \ _)\ d {3} [0-9]',''),我只是在乎數字,所以讓我直接訪問它們。 ',dot)'但它的刪除+/_ XXXX不能代替:( – pejot

+0

這個補充屬於帖子,而不是註釋 – LogicStuff

+0

我在這個頁面上用'3715'使用了CTRL + F,並且只在你的預期輸出中找到了這個值。請檢查您的輸入。 –

回答

0

您還沒有描述你的數據非常好,但它看起來你有兩種類型的行:

(一個或零個字符)(四位數)(其他的東西)

(不帶有設置的四位數的其他東西)

我建議使用re包。 Here是Python 3中模塊的文檔,您應該仔細閱讀這些文檔,以便能夠在將來自行解決這些問題。

我假設你有一個名爲lines列表中的所有線路(或其他可迭代):

import re 
regex = re.compile(r'^.?([0-9]{4})') 
for line in lines: 
    match = regex.match(line) 
    if match: 
     number = match.group(0) 
     # Do stuff with `number`, which is a string. 

這是假設有領先的四位數字的永遠只能一個字,那你不關心後來發生的事情。

如果你只是想要任何出現的前四位數字(提前有任意數量的字符),你可以改爲使用regex = re.compile(r'[0-9]{4}')


的正則表達式的工作原理

第一個正則表達式是^.?([0-9]{4}。我會爲你解決這個問題,因爲我猜你對於正則表達式是新手。

  • ^行的開頭
  • .比賽任何字符恰好一次
  • ?說,使以前的比賽是0或1次
    • 所以.?說匹配「給我最多一個字符,我不知道「
  • ()括號用於分組,告訴正則表達式引擎「做比賽,但讓我專門訪問他們自己的這些東西」
  • []用於指定字符的類;發動機將一個字符從括號內匹配
    • [0-9]是數字的字符類:在-匹配一切都包容在ASCII排序(我相信)
  • {N}指定要重複以前的東西究竟N
    • [0-9]{4}說: 「給我四位」

當我們把它們放在一起作爲^.?([0-9]{4})時,我們有效地對正則表達式引擎說:「給我一個字符串,從行首開始,可能在開頭有一個額外的字符,然後有四個字符數字之後立即。 「

相關問題