Pythonシリーズのパターンマッチングと正規表現

WeChatパブリックアカウント「プログラマーコアラ」を検索

テキスト検索に慣れている場合があります。つまり、Ctrl-Fを押して、検索したい単語を入力します。「正規表現」は、Ctrl-Fのアップグレードバージョンです。正規表現は素晴らしいですが、プログラマーでない場合、正規表現に精通している人はほとんどいませんが、ほとんどの最新のテキストエディターやワードプロセッサには、正規表現に基づいて検索できる検索および検索機能と置換機能があります。正規表現は、ソフトウェアユーザーだけでなく、プログラマーにとっても多くの時間を節約できます。正規表現、他の人が何日も面倒な解決に必要な問題、他の人はエラーが発生しやすい問題を学び、問題を解決するにはキーを入力するだけです。

 

以下は、正規表現を使用してテキストパターンを検索する方法ではありません。

文字列で電話番号を検索したいが、パターンがわかっているとします。3桁、1ダッシュ、3桁、1ダッシュ、次に4桁です。例:498-553-5453。

isPhoneNumber()という関数を使用して、文字列がパターンに一致するかどうかを確認すると、TrueまたはFalseが返されます。新しいファイルエディターを開き、次のように入力します。

 

def isPhoneNumber(text):
  if len(text) !=12:
      return False
  for i in range(0,3):
      if not text[i].isdecimal():
          return False
      if text[3]!='-':
          return False
  for i in range(47):
      if not text[i].isdecimal():
          return False
      if text[7] != '-':
          return False
  for i in range(812):
      if not text[i].isdecimal():
          return False
  return True
print('498-553-5453 is a phone number:')
print(isPhoneNumber('498-553-5453'))
print('Moshi moshi is a phone number:')
print(isPhoneNumber('Moshi moshi'))

 

プログラムを実行すると、出力は次のようになります。

 

498-553-5453 is a phone number:
True
Moshi moshi is a phone number:
False

 

isPhoneNumber()関数をパラメーター ' 498-553-5453 'で呼び出すとTrueが返され、パラメーター ' Moshi moshi 'でFalseが返されます。最初のテストは12文字ではないため失敗します。

より長い文字列でこのテキストパターンを見つけるには、さらにコードを追加する必要があります。上記のコードの4つの印刷関数呼び出しを次のコードに置き換えます。

 

message='Call me at 498-553-5453 tomorrow.415-233-2322 is my office.'
for i in range(len(message)):
 chunk=message[i:i+12]
 if isPhoneNumber(chunk):
   print('Phone number found:' + chunk)
   print('Done')

 

プログラムを実行すると、出力は次のようになります。

 

Phone number found:498-553-5453
Phone number found:415-233-2322
Done

 

この例では、メッセージの文字は非常に短いですが、数百万の文字が含まれている場合もあり、プログラムの実行に1秒はかかりません。正規表現を使用して電話番号を検索する同様のプログラムは、1秒以上実行されませんが、正規表現を使用してそのようなプログラムを作成すると、はるかに高速になります。

なし

 

 
 
 

 

 

 

 

 
元の13件の記事を公開 いいね2 訪問577

おすすめ

転載: blog.csdn.net/weixin_40273144/article/details/80294518