您還沒有描述你的數據非常好,但它看起來你有兩種類型的行:
(一個或零個字符)(四位數)(其他的東西)
或
(不帶有設置的四位數的其他東西)
我建議使用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})
時,我們有效地對正則表達式引擎說:「給我一個字符串,從行首開始,可能在開頭有一個額外的字符,然後有四個字符數字之後立即。 「
我使用了're.sub(r'(\ + | \ _)\ d {3} [0-9]',''),我只是在乎數字,所以讓我直接訪問它們。 ',dot)'但它的刪除+/_ XXXX不能代替:( – pejot
這個補充屬於帖子,而不是註釋 – LogicStuff
我在這個頁面上用'3715'使用了CTRL + F,並且只在你的預期輸出中找到了這個值。請檢查您的輸入。 –