2015-08-24 60 views
-3

在python3中,我需要從格式爲555=AB:C$: EF 1234567890的序列中提取一個10位數字,我應該怎麼做? =和10位字符串之間的字符串幾乎可以是任何字符,而這些字符的長度始終爲10 ...我嘗試使用re.compile(),但無法設置適當的模式。任何建議是值得歡迎的!編輯#1:字符串總共有20個字符,最後10個數字,前10個可以是任何東西(空格,字母,$或其他符號和數字)。因此,我還無法確定一個好的模式。編輯#2:問題是,我不能真正識別哪個字符在字符串的末尾(該字符串是一個大文件的一部分)。這個字符串之後的字符是在windows/linux/unix中似乎沒有統一顯示的字符。因此,我試圖從一開始就找到它,而不是從最後開始。謝謝!python正則表達式忽略幾個字符

+5

你的[-10:]'是否適合你? – vaultah

+1

您嘗試了哪些模式,以及這些模式如何不像您預期​​的那樣運作? – dsh

+1

如果你想提取一個10位的數字,'r'\ d {10}'可能值得一試。 –

回答

0

如果10位字符串總是在最後,你應該能夠

>>> "555=AB:C$: EF 1234567890"[-10:] 
'1234567890' 

編輯提取它們:

根據您的編輯,你並不需要一個正則表達式。如果你的字符串總是20個字符,你可以在python中使用普通的字符串操作。因此,無論[-10:]甚至[10:]

>>> "AB:C$: EF 1234567890"[10:] 
'1234567890' 

採取後者,如果你想處理從一開始你的字符串。

如果你不能使用字符串到最後,因爲你不知道它在哪裏結束,你可以只使用

>>> "AB:C$: EF 1234567890"[10:20] 
'1234567890' 
1

如果這10位是總是最後的10個字符字符串,你可以按s[-10:],如在其他答案建議。

如果不能保證,只需使用regular expression即可搜索10位數字,並忽略該字符串的其餘部分。這種模式是\d{10},即數字\d{10}十次。

>>> import re 
>>> s = "555=AB:C$: EF 1234567890" 
>>> re.search(r"\d{10}", s).group() 
'1234567890' 

按照你的說法:

=和10位字符串之間的字符串可以是幾乎任何字符,而這些字符的長度總是10

如果您需要在更大的文本內找到這些數字,您可以搜索=,然後搜索任意10個字符,然後搜索10個數字,即=.{10}\d{10}

text = "foo bar not a block 1234567890 blub stuff 555=AB:C$: EF 1234567890 more unrelated stuff and another block 555=AB:C$: EF 1234567890 and finally more stuff" 
p = re.compile(r"=.{10}(\d{10})") 
for x in re.finditer(p, text): 
    print x.group(1) 

輸出是1234567890後兩個基團。

相關問題