[英]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.