2017-08-06 4 views
3

マイブック「はPythonで退屈なものを自動化するには、」与えられた文字列に電話番号を取得しようとすると、この複雑な正規表現を持っています正規表現が必要な電話番号と一致しないのはなぜですか?

((\d{3}|\(\d{3}\))?(\s|-|\.)?\d{3}(\s|-|\.)\d{4}(\s(ext|x|ext.)\s*\d{2,5})?)

222-666-7777内線322正規表現と一致するはずの電話番号ですが、そうではありません。私はregex101を使用していました。私の正規表現へのリンクはhttps://regex101.com/r/OIMqNB/1です。誰かが私に間違っていると教えてもらえますか? regexで

+1

この本のような例で正規表現を教えている場合は、それを放棄してください。 –

+0

@cᴏʟᴅsᴘᴇᴇᴅNah!それは 'VERBOSE'の使用を教えていました。上記のような正規表現があれば、 'VERBOSE'を使うべきだと言いました。 –

+0

いつもextですか?またはいくつかの数字には含まれませんか? –

答えて

3

が正しいか、あなただけの2つのスライスで正規表現を破った改行を追加しました:

((\d{3}|\(\d{3}\))?(\s|-|\.)?\d{3}(\s|-|\.)\d{4} 
(\s*(ext|x|ext.)\s*\d{2,5})?) 

はちょうど{4}後CANCをヒットし、あなたのregex101リンクで同じ行にそれを入れて、あなた意図したとおりに動作することがわかります。視覚的なヘルパーを使用している間

((\d{3}|\(\d{3}\))?(\s|-|\.)?\d{3}(\s|-|\.)\d{4}(\s*(ext|x|ext.)\s*\d{2,5})?) 

それはちょうどダブルあなたの正規表現をチェックし、一般的なエラーですあなたは私があなたのためにそれを修正したいくつかの奇妙な行動

1

を参照してください同じライン毎回上にある、あなただけ置くことで混乱していますa 。 ここに新しい正規表現があります:https://regex101.com/r/OIMqNB/2

+0

これは修正ではありません(修正が全く必要ありません)。あなたはその変更に多くの問題を追加しました(たとえば、 "222-666-7777 ext"もエラーです)。オリジナルの正規表現は意図したとおりに機能し、正しく動作するためには1行にするだけです – Defrag

+1

私はそれを1行に入れようとしたときに動作していないとも考えていました。だから私はそこに別の問題もあると思った。 Btw、申し訳ありません。私のせい。 – Syncro

関連する問題