簡體   English   中英

提取除正則表達式匹配之外的所有內容

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

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