找到与特定正则表达式匹配的字符串,然后从该列表中排除任何符合一个或多个条件的内容

时间:2015-05-04 18:34:40

标签: regex file grep

我使用astrogrep搜索电子邮件

让我非常宽容我正在使用这个正则表达式:[a-z0-9_.-]+@[a-z0-9_.-]+

但我必须忽略该搜索中的一些电子邮件

如果我在电子邮件的开头找到ABCD或YXZ,例如ABCDsomething@something.comYXZ something@something.com我必须将其从结果中排除

我尝试了一些类似的事情;

(?!abcd)|([a-z0-9_.-]+)@[a-z0-9_.-]+
^(?!abcd+)|([a-z0-9_.-]+)@[a-z0-9_.-]+
(?!abcd)([a-z0-9_.-]+)@[a-z0-9_.-]+
(?!abcd+)([a-z0-9_.-]+)@[a-z0-9_.-]+

等...

当我在google上搜索时,这似乎很容易,但似乎我找不到让它工作的方法

修改

在文件夹中创建3个文本文件 第一个文件包含3行:

  

abcdsomething@something.com
  xyzsomething@something.com
  something@something.com

第二档1行

  

something@something.com

第三档3行

  

EMAIL1 =" abcdsomething@something.com"
  EMAIL2 =" xyzsomething@something.com"
  EMAIL3 =" something@something.com"

使用astrogrep搜索该文件夹,案例不敏感

预期结果在每个文件中找到1封电子邮件

[a-z0-9_.-]+@[a-z0-9_.-]+我正确收到所有电子邮件,但我只想忽略以abcd / xyz开头的那个

2 个答案:

答案 0 :(得分:0)

你可以使用这样的负向前瞻:

import numpy as np

def process_row(row, row_num, out):
    row = row.split()
    nvals = len(row)
    out[row_num,:nvals] = row

def process_file(fname, shape):
    data = np.zeros(shape)
    with open(fname) as fin:
        for i, row in enumerate(fin):
            process_row(row, i, data)
    return data

data = process_file(fname="C:/temp/temp.txt", shape=(15,5))
data[data != 0] += 129

如果在输入开始时找到(?!\b(abcd|xyz))[a-z0-9_.-]+@[a-z0-9_.-]+\b abcd,则匹配将失败。

答案 1 :(得分:0)

似乎答案是\b(?!abcd|xyz)[a-z0-9_.-]+@[a-z0-9_.-]+