2017-11-04 14 views
-1

私は次の行を実行しようとしていて、Pythonは['402-292-2345']を返すことを期待していますが、シェルから取得するのはすべて[下の最終行私は間違って何をしていますか? (注:欠落したダッシュを反映するために、元のコードを編集しました。)regex findall()のみを返す[]

後編集:IDLEのテキストエディタを使用してそこからシェルを実行することに関連すると思われる追加の問題が発生しました。 は、あなたのコメントのカップルの後、私はシェルで直接以下のラインを走り、テキストエディタからこの蘭

下の#2が返されました:#2、その後

phoneRegex = re.compile(r'\d\d\d-\d\d\d-\d\d\d\d') 
resume = '''IM A SAMPLE 1234 North 55 Street Bellevue, Nebraska 68005 402-292-­2345 [email protected] PROFESSIONAL REFERENCES Name Attaboy Company''' 
phoneRegex.findall(resume) 
[] 

私が直接これを実行しましたシェル:予想通り[ '402-292-2345'] を返さ

phoneRegex = re.compile(r'\d\d\d-\d\d\d-\d\d\d\d') 

resume = '''IM A SAMPLE 1234 North 55 Street Bellevue, Nebraska 68005 402-292-2345 [email protected] PROFESSIONAL REFERENCES Name Attaboy Company''' 

phoneRegex.findall(resume) 

これは、シェルで直接実行されていましたが、IDLEのテキストエディタでは実行されませんでした。

+3

'402-2922345'部分文字列に' -'が2つあります。 'r' \ d {3} - \ d {3} - ?\ d {4} ''を試してください。それでも '402-2922345'が返されます。マッチを後処理ステップとして再フォーマットする必要があります。 –

+0

サイドノートとして:[regex101.com](https://regex101.com/r/7UtxEt/2)のような正規表現をデバッグするのに最適なオンライン正規表現テストアプリがあります。 – Xukrao

+1

@ウィクショーありがとう - 元のテキストエディタにあるように、なぜ2番目のダッシュが欠けていたのか分かりません。私はまた、私のIDLEシェルに直接行を置くことによって別の実験を実行し、それは正常に実行されました。 IDLEテキストエディタから実行するときにさらに注意を払う必要のあるものがあるかどうか疑問に思う。 – samueljames3

答えて

3
phoneRegex = re.compile(r'\d\d\d-\d\d\d-\d\d\d\d') 

このパターンは、3つの数字、ダッシュ、3つの数字、ダッシュ、最後に4つの数字を照合しようとしています。

Regexp findは入力フォーマットを変換することができません。それを検索するだけです。より一般的な解決のために(例えば:あなたが指摘している番号を照合するには、次の正規表現

"\d{3}-\d{7}" 

(中括弧は読み正規表現が少し容易になり、繰り返しのために使用することができる)

編集してみてくださいあなたは)正確な入力形式を知らない、あなたはおそらく、単一のスペースまたは一部/すべての桁/なしを分離ダッシュで、10桁の文字列にマッチします。この

(?:\d[\- ]?){10} 

ような何かを試みることができます。

ブラケットの後の面白い探し?:は、かっこの中身を表示するのではなく、かっこを非一致としてマークします。

+0

元の質問では、入力にはダッシュが1つしか含まれていません。これが間違っている場合は、質問を編集する価値があります。編集:これは、削除されたコメントに返信していました。 – Matt

関連する問題