簡體   English   中英

如何使用 python 有效地解析數據

[英]How to parse data effectively with python

這是我用於提取我想要的字段的代碼。
但是,我不認為它有效,因為提取取決於字段數。
當然這在小數據中並不重要,但是我想知道更好的方法。
所以我想一次或更有效地提取
對不起我的愚蠢。

import re

data="""
Message-ID: <1608636066635.7f830.79689714@crcvmail15.nm>
Received: from 125.209.x.x (net58.219.x-x.host.lt-nn.net [91.219.x.x])
 by crcvmail15.google.com with ESMTP id +844Q-zuS122aEqk5CZDZg
 for <test@google.com>;
Received: from 125.209.x.x (net58.219.x-18.host.lt-nn.net [91.219.x.x])
 by crcvmail15.google.com with ESMTP id +844Q-zuS122aEqk5CZDZg
 for <test@google.com>;
 Tue, 22 Dec 2020 11:20:58 -0000
From: "test"<from@google.com>
To: test@google.com
Subject:example email
Content-Type: text/html; charset="utf-8"
Content-Transfer-Encoding: quoted-printable
"""

def searchHeader(field):
    form = re.search(r'('+field+'\W+(.*?)\n)',data)
    if form:
        print(form.group())

fields = ['From','To','Cc','Subject','Message-ID','Date','(Return-Path|Reply-To)']
for field in fields:
    res = searchHeader(field)

根據您對“有效”的定義,您可以使用命名捕獲組:

(?P<field>^[\w-]+): *(?P<value>[\s\S]+?)(?=^[\w-]+: *|\Z)
  • (?P<field>^[\w-]+) - 將捕獲組命名為“字段”並從行的開頭捕獲所有內容,即\w字符或-破折號。
  • : * - 捕獲一個冒號,后跟可選空格。
  • (?P<value>[\s\S]+?) - 將捕獲組命名為“值”並捕獲所有內容(包括換行符)。 如果啟用 dotall 修飾符,那么.+? 可以用來代替[\s\S]+? . 這確保我們捕獲可以在Received:之后找到的多行值。
  • (?=^[\w-]+: *|\Z) - 繼續捕獲“值”,直到我們點擊一個新的“字段”或字符串的末尾。

https://regex101.com/r/rBBRfM/1

您可以在 regex101 的右上角看到性能統計信息。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM