2016-09-06 2 views
0

現在、テキストメッセージコマンドサーバーを作成しようとしています(基本的には、Googleの音声にテキストを送信します。 Python IMAPライブラリを使ってメッセージにアクセスし、それを解析します)、興味深い問題があります。時には、テキストはRegex - サフィックスの有無にかかわらず、一致グループに含めないで文字列を一致させます。

-- 
Sent using SMS-to-email. Reply to this email to text the sender back and save on SMS fees. 
https://www.google.com/voice/ 

は、コマンドの解析時にエラーが発生したテキストメッセージに追加される文字列、伝わってくるとき。今、コマンドを検出するために、私は(このような複数の行を使用することができ時限sendコマンドなどの特定のコマンドに複数行と大文字と小文字が区別されます)、次の正規表現を使用します。

^/(randomfact) *(\S*)\s*$ 

しかし、私に言って、文字列からそれは電子メールにSMSを介して送信されたがしばらくの間、一致が検出されません。 pythonのprint機能を使用して、以下のように、メッセージが表示されます。

/randomfact\r\n\r\n--\r\nSent using SMS-to-email. Reply to this email to text the sender back and \r\nsave on SMS fees.\r\nhttps://www.google.com/voice/ 

今、その問題に対処するために、私はこれやって試してみました:

^/(randomfact)\s*(\d*)(?=\n\n--\nSent using SMS-to-email\. Reply to this email to text the sender back and save on SMS fees\.\nhttps://www\.google\.com/voice/) 

をしかし、文字列の場合にのみ動作しますコマンドに追加されます。そうでない場合、正規表現は失敗します。私の質問です:それは文字列内に存在するかどうか、任意の正規表現の一致からその文字列を除外する方法はありますか?

+0

だから、ときどき表示されるフッターを除外する方法が必要ですか? – wpcarro

答えて

0
def remove_footer(incoming_str): 
    footer = ''' 
-- 
Sent using SMS-to-email. Reply to this email to text the sender back and save on SMS fees. 
https://www.google.com/voice/''' 
    if incoming_str[-len(footer):] == footer: 
     return incoming_str[:-len(footer)] 
    else: 
     return incoming_str 

問題に直面したとき、一部の人は、 "私は正規表現を使用します、私は知っている。" と思います今、彼らには2つの問題があります。

+0

これが私がしようとしていることのための最良のアイデアだと考えてください。 – TheCompModder

0

問題を正しく理解している場合は、メッセージのオプションの署名を除外しています。 Pythonでは、1行の正規表現フラグ(つまりre.S)を設定し、次の正規表現を使用して目的のコンテンツを取得することができます。

regex = re.compile(r'(.+)(?=--)|(.+)', r.S) 
+0

これは素晴らしいことですが、特定のコマンドが複数行になる可能性があります。たとえば、/ sendコマンド(スケジュールされた時刻にメッセージを送信します)は、そのフッターを除いて解析できる複数行の入力を受け付けます。私はメインのポストを更新します。 – TheCompModder

+0

「特定のコマンドが複数行になる可能性がある」と言うとき、メッセージの本文に改行文字が含まれている可能性がありますか? 're.S'は' .'メタ文字が '\ n'文字にマッチすることを許します。あなたは与えられた正規表現を試しましたか?それとも、あなたの問題に対して、私が行方不明になっている他の側面がありますか? – wpcarro

+0

特定のコマンドに改行があり、ユーザーの入力を受け入れることがあるため、ユーザーが2つのダッシュを入力しないと想定できません。 – TheCompModder

関連する問題