-1

正規表現からスペースを持つ値を取得するのに問題があります。キー値メカニズムを使用して正しい正規表現を提供するのを手伝ってくれる人はいますか? Key-Value の位置は変更される可能性があり、固定されていないことに注意してください。

正規表現

\s*([\w\d_]*)=(.*?)\s+

入力

spt=38271 deviceExternalId=SUKUK node 1 dst=99.111.185.141 app=HTTPS rt=Jan 23 2013 15:30:45 deviceFacility=Packet filter msg=Connection was reset by server destinationTranslatedPort=443 

私の結果

Match 1: spt=38271 
    Subgroups:
    1: spt
    2: 38271
Match 2: deviceExternalId=SUKUK 
    Subgroups:
    1: deviceExternalId
    2: SUKUK
Match 3:  dst=99.111.185.141 
    Subgroups:
    1: dst
    2: 99.111.185.141
Match 4: app=HTTPS 
    Subgroups:
    1: app
    2: HTTPS
Match 5: rt=Jan 
    Subgroups:
    1: rt
    2: Jan          **==>Should grab [Jan 23 2013 15:30:45]**
Match 6:  deviceFacility=Packet 
    Subgroups:
    1: deviceFacility
    2: Packet       **==>Should grab [Packet filter]**
Match 7:  msg=Connection 
    Subgroups:
    1: msg
    2: Connection   **==>Should grab [Connection was reset by server]**
Match 8:  destinationTranslatedPort=443 
    Subgroups:
    1: destinationTranslatedPort
    2: 443
4

2 に答える 2

2

これを試してください:

([\w\d_]+)=(.*?)(?=\s+[\w\d_]+=|$)

print "$1\n$2";
于 2013-01-29T06:40:39.493 に答える
1

より簡単:\s*([\w\d_]*)=([^=]+)\s+

于 2013-01-29T06:55:08.373 に答える