2017-12-21 4 views
1

私は長い文字列のリストから日付を取り除こうとしていますが、それぞれに日付が含まれていてもいなくてもかまいません。そのような文字列の例は次のようになります。Regexを 'Str'に変換してPythonの文字列から日付を取り除く

"Jane Doe 76554334 12/15/2017 - 8:35 pm 700945 - SDFTRD $550.95" 

私はエラーを返す方法で構築しています:私の目的は(\d+/\d+/\d+)に正規表現マッチを探しにきて、その試合を変換した

AttributeError: 'NoneType' object has no attribute 'match_object' 

.replace()と一緒に使用できるように文字列に変換します。私はmatch_objectを使ってこれを解決できないようです。

def replace_match(string): 
    match=re.search(r'(\d+/\d+/\d+)',string) 
    if match: 
     match=re.match(r'(\d+/\d+/\d+)',string).match_object.group(0) 
     print("match = " + match) 
     string = string.replace(match, "") 
    else: 
     print("no match found") 
    return string 

私はあなたがre.sub使用できるのPython 3.6.3

+0

あなたが他の人を見つけなければならないが、この[記事]でそれを行うための手段(https://stackoverflow.com/questions/9978534/match-dates-using-python-regular-expressions)のtry-catchで。 –

答えて

5

使用しています:

はここに私の方法である

import re 
s = "Jane Doe 76554334 12/15/2017 - 8:35 pm 700945 - SDFTRD $550.95" 
new_s = re.sub('\d+\/\d+\/\d+', '', s) 

出力:

'Jane Doe 76554334 - 8:35 pm 700945 - SDFTRD $550.95' 

編集、そのタイムスタンプ:

import re 
s = "Jane Doe 76554334 12/15/2017 - 8:35 pm 700945 - SDFTRD $550.95" 
new_s = re.sub('\d+\/\d+\/\d+|\d+:\d+(?=\spm)|\d+:\d+(?=\sam)', '', s) 

出力:

\d+:\d+:タイムスタンプ除去正規表現のための

'Jane Doe 76554334 - pm 700945 - SDFTRD $550.95' 

説明が一致した時、次に分 (?=\sam)は:\d+:\d+が登録していないことを意味します肯定先読みであり、一致する文字の後にスペースが続く場合を除いて一致し、次にamとなり、実際にタイムスタンプであることが示されます。

\d+:\d+(?=\spm)は、時間一致が両方の時間の規則を考慮し、午後に先行されている場合、それがチェックされていること以外は上記と同様ありません。

+0

それはうまくいった!私は不思議ですが、私は '' 'r '(\ d + \/\ d + \/\ d +)'' 'の形式で正規表現を使用することに慣れています。この場合に '' 'r()' 'が必要でない理由を知っていれば興味があります。 – HMLDude

+0

@HMLDude 'r'、または生の文字列は、直ちに'「\」エスケープシーケンス内の特殊文字として 'sの、または文字通りの治療のために通訳を可能にします。通常の文字列では、 '' \ "はエスケープ文字として使われない限り' '\"として扱われます。 Pythonの正規表現の場合、インタプリタは生の文字列として渡されたかどうかにかかわらず、エスケープ文字として '" \ "を評価します。 – Ajax1234

+0

冗長なエスケープを避けることをお勧めします。 ''\ d +/\ d +/\ d +''を使用してください。 Pythonの正規表現パターンでは、 '/'は決して特別なものではありません。 –

関連する問題