Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 比较两份文件_Regex_Excel_List_Csv - Fatal编程技术网

Regex 比较两份文件

Regex 比较两份文件,regex,excel,list,csv,Regex,Excel,List,Csv,我有两个非常大的清单。它们最初都是excel,但较大的一个是电子邮件列表(约160000封),其中包含其他信息,如姓名和地址等。较小的一个是仅18000封电子邮件的列表 我的问题是,如何最简单地删除第一个文档中包含第二个文档电子邮件地址的18000行? 我在想regex或者我可以使用另一个应用程序?我尝试过在线搜索,但似乎没有太多的具体内容。我也试过记事本+,但当我试着比较这些大文件时,记事本就冻结了 -提前谢谢你 好问题。我要解决的一个方法是制作C++程序[你可以把这个想法推算到你所选择的语言

我有两个非常大的清单。它们最初都是excel,但较大的一个是电子邮件列表(约160000封),其中包含其他信息,如姓名和地址等。较小的一个是仅18000封电子邮件的列表

我的问题是,如何最简单地删除第一个文档中包含第二个文档电子邮件地址的18000行?

我在想regex或者我可以使用另一个应用程序?我尝试过在线搜索,但似乎没有太多的具体内容。我也试过记事本+,但当我试着比较这些大文件时,记事本就冻结了


-提前谢谢你

好问题。我要解决的一个方法是制作C++程序[你可以把这个想法推算到你所选择的语言中,你从来没有提到你精通的语言),把小文件的每一项都读入字符串向量中。首先,当然,使用Excel将文件保存为CSV,而不是XLS或XLSX,这将用逗号分隔这些值,以便您可以更轻松地使用它们。对于较大的列表,“另存为”只是电子邮件地址的副本,现在删除其他行

然后,您可以打开较大的列表并使用嵌套循环检查是否应该输出到输出文件。比如:

bool foundMatch=false;
for(int y=0;y<LargeListVector.size();y++) {
    for(int x=0;x<SmallListVector.size();x++) {
        if(SmallListVector[x]==LargeListVector[y]) foundMatch=true;
    }
    if(!foundMatch) OutputVector.append(LargeListVector[y]);
    foundMatch=false;
}
bool-foundMatch=false;

对于(int y=0;y,因此我在以下网站上阅读了一篇论坛帖子:

=匹配(B1$A$1:$A$3,0)>0

B列是一个很大的列表,有160000条输入,A列是我需要删除的18000条内容的列表

我用它来匹配所有内容,并在一个单独的列中粘贴了这个公式。它将打印出一个错误或TRUE。如果两列中都有数据,它将打印出TRUE

然后,因为我不喜欢excel,我把这些文本放到记事本++中,搜索所有包含TRUE的行(匹配大小写,因为在我的例子中,有些数据中有TRUE这个词,没有大写)。我标记了这些行,然后在“搜索”“书签”下,我删除了所有带有书签的行。将其粘贴回excel,瞧


我要感谢你们的帮助并为我指明了正确的方向:)

你们熟悉任何编程语言的编程吗?如果是的话,你能发布更多关于两个文件的结构和格式的详细信息吗?在160000列表中,电子邮件地址是否在一列中?如果是这样,您可以将这两个列表都放在Excel中,并使用
vlookup
(假设电子邮件地址完全匹配)查找18000封重复的邮件,然后使用
AutoFilter
Sort
将其删除。如果可行,这是一个基于正则表达式的解决方案,对于您的目的来说可能效率很低。如果您懂一点编程,您可以自己编写脚本。在PHP中,可以使用
array\u diff
array\u intersect
等函数来比较两个地址数组。我同意Scott Holtzman的观点。假设它们的格式为csv,您只需在excel中打开它们,并使用诸如vlookup、autofilter和/或sort之类的函数来比较列表并过滤掉它们。需要注意的一点是,如果您使用excel 2003,它的行数限制仅超过65000行,因此只有在使用excel 2007或更高版本时,您才会希望使用此方法。谢谢!我精通C++,所以当我到家时(我的工作中没有编译器),我会给你一个答案。