2017-01-05 7 views
-1

私はパーソナルプロジェクト(本書のプロジェクト1の専門版をPythonで自動化しますが、具体的には 携帯電話番号 (+91または91)はオプションですが、かっこで囲まれていない可能性があります。 の後にオプションのスペース(\ s)を付けてもかまいませんか? (\ d \ d \ d)? 3桁の市外局番(\ d \ d \ d)?国コード- (+91または91)はオプションですが、かっこで囲んでもかまいません (任意) 2桁のコード(\ d \ d) に続けて(\ sまたは - ) - )8桁の数字が続く任意 Pythonの正規表現で特定のフォーマットの電話番号をクリップボードから抽出する

私が書かれているスクリプトは、 -

import re,pyperclip,os,datetime 

#Regexes for phone numbers. 
cellphone = re.compile(r'((91|+91|\(+91\))?\s?\d{10})') 
landline = re.compile(r'((\d{3}|\(d{3}\))?(-|\s)(\d{8}))') 
landline_with_countrycode = re.compile(r'((91|+91|\(+91\))(-|\s)(\d{2})(-|\s)?(\d{8}))') 

#Taking input from clipboard 
text = str(pyperclip.paste()) 
cell_nums = [] 
for groups in cellphone.findall(text): 
    cell_nums.append(groups[0]) 
ll_nums = [] 
for groups in cellphone.findall(text): 
    ll_nums.append(groups[0]) 
ll_nums_wccode = [] 
for groups in cellphone.findall(text): 
ll_nums_wccode.append(groups[0]) 

#Sending output to a file that was created on Desktop in folder abswpy named phnumbers.log 
file_path = os.path.join("C:","Users","lenovo","Desktop","abswpy","phnumbers.log") 
openFile = open(file_path,'a') 
now = datetime.datetime.now() 
openFile.write('______________________________________________________________________________________________________\n\n') 
openFile.write('\n\n As updated on '+str(now)+'\n\n') 
openFile.write('---------------------------------------------------------\n')  
openFile.write('Cellphone Numbers - \n') 
for i in cell_nums: 
    openFile.write(str(i)) 
openFile.write('---------------------------------------------------------\n') 
openFile.write('Landline Numbers - \n') 
for i in ll_nums: 
    openFile.write(str(i)) 
for i in ll_nums_wccode: 
    openFile.write(str(i)) 
openFile.write('---------------------------------------------------------\n') 
openFile.write('Process Completed') 
openFile.write('______________________________________________________________________________________________________\n\n')  
openFile.close() 
print "Numbers extracted if present\n" 

コードはコンパイル時のエラー -

File "regex.py", line 22, in <module> 
    cellphone = re.compile(r'((91|+91|\(+91\))?\s?\d{10})') 
File "E:\Python 2_7_11\lib/re.py", line 194, in compile 
    return _compile(pattern, flags) 
File "E:\Python 2_7_11\lib/re.py", line 251, in _compile 
    raise error, v # invalid expression 
sre_constants.error : nothing to repeat 

なぜ私の表現が間違って評価されいますか? 事前にお手伝いしていただきありがとうございます。私は初心者です!

+0

あなたは '+'をエスケープしませんでした。 –

答えて

0
re.compile(r'((91|\+91|\(\+91\))?\s?\d{10})') 
       ^ ^ 

あなたが+の.as +は、正規表現エンジンのための特別な文字でエスケープする必要があります。 または使用[+]

+0

ありがとう!それは働いた –

+0

このスクリプトが正常に実行されたときに、陸線番号(MAXで8桁を含む)で携帯電話番号を取り除く(9999999999(9 * 10)から99999999(9 * 8))、数値を受け入れることもできます。 –

+0

アンカー^と$を使用しても、正しい出力を得ることができません。 –

関連する問題