3

以前にこの質問をしたことがありますが、以前に指定した形式に対応していない行がいくつか見つかったため、編集しました...


以下は行の例です。

data = "09:55:04.125 mta         Messages       I Doc O:SERVER (NVS:SMTP/me@domain.com) R:NVS:FAXG3.I0.0101 mid:6393"
data2= "09:55:05.045 mta         Messages       I Doc O:SERVER (NVS:SMTP/me@domain.com) R:ADMIN (NVS:SMTP.0/me@domain.fr) mid:6397"

最初に、スラッシュと 2 つのポイントの間を一致させましたが、最初のような「FAXG3.I0.0101」タイプの後にスラッシュが続かない行がいくつかあることに気付きました。


ここに私が使用する正規表現があります:

exp = result = re.findall(r'[\w\.]+(?=:*)',data) # type S & D

必要な結果は、最初の行が 'SMTP','FAXG3.I0.0101' で、2 行目が 'SMTP','SMTP.0' です。誰かが私の正規表現を修正してそれを取得するのを手伝ってもらえますか??

4

2 に答える 2

3

「。」も受け入れるように正規表現を変更するだけです。有効な文字として、例えば:

import re 
data = "This is a test message I Res O:Myself (KTP:SMTP/me@domain.com) R:KTP:SMS.CLASS/+345854595 id:21"
result = re.findall(r'[\w\.]+(?=:*/)',data)
print result

['SMTP', 'SMS.CLASS']

[\w\.]+、少なくとも 1 つの「任意の英数字とアンダースコア」 ( \w) または.( - それ以外の場合は「任意の文字」を意味する\.ため、エスケープする必要がある) で構成されるシーケンスを受け入れると述べています。.

于 2013-04-23T08:44:17.930 に答える
1

それはうまくいくはずです:

result = re.findall(r'(?<=:)[\w.]+(?=/)',data)

:「との間の一連の英数字 (またはアンダースコアまたはドット) 」と言い/ます。

于 2013-04-23T08:44:28.997 に答える