分别提取两个列表中提供的两个单词之间的字符串

时间:2019-11-21 02:31:07

标签: python

我有一个看起来像电子邮件正文的文本,如下所示。

To: Abc Cohen <abc.cohen@email.com> Cc: <braggis.mathew@nomail.com>,<samanth.castillo@email.com> Hi 
Abc, I happened to see your report. I have not seen any abnormalities and thus I don't think we 
should proceed to Braggis. I am open to your thought as well. Regards, Abc On Tue 23 Jul 2017 07:22 

下午     托尼·斯塔克写道:

然后我有一个关键字列表,如下所示。

no_wds = ["No","don't","Can't","Not"]
yes_wds = ["Proceed","Approve","May go ahead"]

目标: 我想首先搜索上面给出的文本字符串,如果存在(或存在)上面列出的任何关键字,那么我想提取这些关键字之间的字符串。在这种情况下,我们有Not个匹配的don'tno_wds个关键字。另外,我们还有Proceed列表中匹配的yes_wds关键字。因此,我要提取的文本如下所示

txt = ['seen any abnormalities and thus I don't think we should','think we should']

我的方法:

我尝试过

 re.findall(r'{}(.*){}'.format(re.escape('|'.join(no_wds)),re.escape('|'.join(yes_wds))),text,re.I)

text_f = []
for i in no_wds:
  for j in yes_wds:
    t = re.findall(r'{}(.*){}'.format(re.escape(i),re.escape(j)),text, re.I)
    text_f.append(t)

没有得到任何合适的结果。然后我尝试了str.find()方法,也没有成功。

我试图从here获得线索。

有人可以帮助解决这个问题吗?我有点希望看到任何非正则表达式的解决方案,因为有时正则表达式不太适合。话虽如此,如果有人可以提出基于正则表达式的解决方案,在这里我可以迭代列表,这是值得欢迎的。

1 个答案:

答案 0 :(得分:0)

浏览包含键的列表,将迭代器用作拆分器(whatever.split(yourIterator))。

编辑:

我没有在做作业,但这应该可以帮助您:

我决定循环遍历邮件的每个空格列表,搜索关键字并将命中索引添加到列表中,然后我使用这些索引对邮件进行切片,可能值得尝试对邮件进行切片邮件,但不拆分,但我不会做您的作业。而且,当索引更多时,您必须找到一种使过程自动化的方法,提示:检查大小是否均匀,或者切片时间不好。 *请注意,您应该替换from Crypto.Cipher import AES import binascii KEY = binascii.unhexlify('AAAABBBBCCCCDDDDEEEEFFFF00001111') plaintext = binascii.unhexlify('11112222333344445555666677778888') rijn = AES.new(KEY, AES.MODE_ECB) ciphertext = rijn.encrypt(plaintext) binascii.hexlify(ciphertext).decode('utf-8') 字符,并找到对键列表进行排序的方法。

\n