2013-08-31 21 views
0

我試圖做一個正則表達式中的巨蟒從.vcf文件檢測7位數字和更新聯繫人。然後它將數字修改爲8位數字(僅在數字前加5).Thing是正則表達式不起作用。什麼是RegEx在Python中查找電話號碼?

我有作爲錯誤消息「EOL在掃描字符串文字」

regex=re.compile(r'^(25|29|42[1-3]|42[8-9]|44|47[1-9]|49|7[0-9]|82|85|86|871|87[5-8]|9[0-8])/I s/^/5/') 

#Open file for scanning 
f = open("sample.vcf") 

#scan each line in file 
for line in f: 
    #find all results corresponding to regex and store in pattern 
    pattern=regex.findall(line) 
#isolate results 
    for word in pattern: 
     print word 
     count = count+1 #display number of occurences 
     wordprefix = '5{}'.format(word) 
     s=open("sample.vcf").read() 
     s=s.replace(word,wordprefix) 
     f=open("sample.vcf",'w') 
     print wordprefix 
     f.write(s) 
     f.close()  

我懷疑我正則表達式是不正確的格式,用於檢測數字的特定模式與2位具有特定的格式,如25X-29X和5個位數,可以是數字的任何圖案。(共7位)

誰能幫我對這種情況採取正確的格式?

+1

爲什麼正則表達式看起來像這樣。爲什麼不簡單''[0-9] {7}'找到行中的所有7位數字? –

回答

1

/I也不怎麼你給於正則表達式的Python修飾。而且你也沒有像s///那樣進行替換。

您應該使用re.sub()的替代,並給出修改爲re.I,爲第一個參數re.compile

reg = re.compile(regexPattern, re.I) 

然後一個字符串s,取代將是這樣的:

re.sub(reg, replacement, s) 

因此,您的正則表達式看起來怪我。如果你想匹配7個數字,從2529,那麼你應該使用:

r'(2[59][0-9]{5})' 

而對於更換,使用"5\1"。總之,對於字符串s,您的代碼將如下所示:

reg = re.compile(r'(2[59][0-9]{5})', re.I) 
new_s = re.sub(reg, "5\1", s) 
+0

+1不只是回答EOL,而且還修復了他可怕的長期正則表達式。 – iCodez

+0

嘿謝謝,以後再試。它的長是有原因的,因爲數字的某些模式需要改變,也有開始421 422和423號等...好了在正則表達式 – scandalous

+0

@scandalous當然列出的所有,你可以試試。此外,如果您可以提供確切的要求,我們可以幫助您創建較短的正則表達式模式。 –