1

ここにある私のスクリプトは、この形式で結果を返すことになっています

[ {'heure':xxxx,'mid': xxxx,'type message': "e.g SMS.Message ", "Origine":xxx,"Destination":xxxx}] 

それはうまくいきますが、 Type メッセージがなければこれを追加したので、正規表現は正しくないと思います。:/正規表現のように見えるものを持たないデータを追加しても機能しないので、やらなければならないと思いますが、方法がわかりませんtry:except::/

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import re 
################################_Function EXTRACT_############################################### 

def extraire(data):
    ms = re.match(r'(\S+).*mid:(\d+).*(R:NVS:\w+)', data) # heure & mid 
    k = re.findall(r"/\S+", data ) # source & destination extracte 
    return {'Heure':ms.group(1), 'mid':ms.group(2),'Type Message':ms.group(3),"Origine":k[0],"Destination":k[1]}


#################################################################################################

tableau = []  
data3 = "12:07:32.546 mta         Messages       I Doc O:TCARVAL (NVS:SMTP/jack.reacher@example.de) R:NVS:VOICE/+45154245 mid:6500"
data4 = "12:07:41.391 mta         Messages       I Rep O:TCARVAL (NVS:SMTP/brad.alison@yow.en) R:NVS:**SMS.Message**/+39872422 mid:6500"
data5 = "12:07:32.546 mta         Messages       I Doc O:TCARVAL (NVS:VOICE/+69517412carval@ifremer.no) R:NVS:SMS.Message/+34659879 mid:6500"
data6 = "12:07:32.545 mta     Messages   I Doc O:TCARVAL Example@whitout-slash.com        R:NVS:VOICE/01020150405 mid:9797"
data_list = [ data3, data4,data5, data6]
tableau = [extraire(data) for data in data_list]
print tableau 
4

2 に答える 2

1

ms一致がない場合でもプロパティにアクセスしようとしているため、extraire 関数をこれに変更します。一致するものがない場合msは None です:

def extraire(data):
    ms = re.match(r'(\S+).*mid:(\d+).*(R:NVS:\w+)', data) # heure & mid                                 
    print(str(ms))
    if(ms is not None):
        k = re.findall(r"/\S+", data ) # source & destination extracte                                  
        return {'Heure':ms.group(1), 'mid':ms.group(2),'Type Message':ms.group(3),"Origine":k[0],"Desti\
nation":k[1]}
    else:
        return {}

ところで、あなたの正規表現は、一致させようとしているテキストと一致していないようです。k探している要素の数が含まれていない場合、List index out of range エラーも発生する可能性があります 。

于 2013-04-18T09:31:31.113 に答える
1

「mid」は「R:NVS」の後に来ているため、パターンの順序が間違っています

12:07:32.546 mta         Messages       I Doc O:TCARVAL (NVS:SMTP/jack.reacher@example.de) R:NVS:VOICE/+45154245 mid:6500
                                                                                           1                     2

したがって、パターンの順序を次のように変更する必要があります

(\S+).*(R:NVS:\w+).*mid:(\d+)

ところで。何が\S+合うと思いますか?ここでは、文字列内の最初の一連の非空白文字に一致します。

于 2013-04-18T09:31:56.227 に答える