[英]Extract everything but a regex match
我有一個數據框,其中每一行都包含電子郵件的原始文本。 我需要清理數據以提取以下列:From、To、CC、Subject 和正文。 電子郵件通常如下所示:
From : Vincent Adultman
To : Business Person,
Cc :
Subject: On the subject of business Transactions
Dear blabla,
We would like to bla bla to improve our bla bla by X%.
Thanks in advance
我能夠使用以下正則表達式提取前四列:
import pandas as pd
df = pd.DataFrame(data=data,columns=['text'],dtype='string')
df['from'] = df.loc[:,'text'].str.extract(pat=r'(\bFrom .+)')
df['to'] = df.loc[:,'text'].str.extract(pat=r'(\bTo .+)')
df['cc'] = df.loc[:,'text'].str.extract(pat=r'(\bCc .+)')
df['bcc'] = df.loc[:,'text'].str.extract(pat=r'(\bBcc .+)')
df['subject'] = df.loc[:,'text'].str.extract(pat=r'(\bSubject: .+)')
現在我試圖提取從Dear blabla
開始的身體的其余部分。 但是,由於每封電子郵件都不同,我無法在Dear blabla
上進行匹配。
除了我已經完成的前四個匹配項之外,我如何匹配所有文本?
這是我嘗試過的:
df.loc[:,'text'].str.extract(pat=r'^(\bFrom .+|\bTo .+|\bCc .+|Bcc .+|\bSubject .+)')
df.loc[:,'text'].str.extract(pat=r'^[(\bFrom .+|\bTo .+|\bCc .+|Bcc .+|\bSubject .+)]')
我究竟做錯了什么?
您可以使用
df['body'] = df['text'].str.replace(r'^(?:\n?(?:From|To|Cc|Subject)\s*:.*)+\s*', '')
請參閱正則表達式演示。
細節
^
- 字符串的開始(?:\\n?(?:From|To|Cc|Subject)\\s*:.*)+
- 一次或多次重復
\\n?
- 一個可選的換行符,換行符(?:From|To|Cc|Subject)
- From
, 或To
, Cc
, Subject
\\s*:
- 0 個或多個空格字符和一個:
char.*
- 除換行符以外的任何 0 個或更多字符,盡可能多\\s*
- 0 個或多個空白字符。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.