В общем, я бы просто выбросил Regex из окна для этого, так как он может довольно быстро усложниться для такого обширного файла.Используя ваш файл контактов вместо \b
, я бы, вероятно, заменил его набором разделителей, таким как £&%
(он прервется, если в этом порядке есть контакты с буквально одинаковой строкой разделителей).
Вот как я бы это написал - обратите внимание, что с точки зрения эффективности, это может быть не самым эффективным, но это будет работать.Также обратите внимание, что я добавил VB-версию Replace
, чтобы регистр игнорировался, поскольку версия C # не имеет этой перегрузки (вместо этого вы могли бы написать функцию расширения).
using Microsoft.VisualBasic;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;
using System.Threading.Tasks;
namespace ConsoleApp5
{
class Program
{
static void Main(string[] args)
{
string contacts = @"contacts.csv";
string content = @"content.csv";
string[] delimiter = { "£&%" };
string read_contents;
using (StreamReader streamReader = new StreamReader(content, Encoding.UTF8))
read_contents = streamReader.ReadToEnd();
string sar_contacts = File.ReadAllText(contacts);
List<string> contactsToReplace = sar_contacts.Split(delimiter, StringSplitOptions.RemoveEmptyEntries).ToList();
int i = 0;
foreach (var wordToCensor in contactsToReplace)
{
read_contents = Strings.Replace(read_contents, wordToCensor, "######", 1, -1, Constants.vbTextCompare);
Console.WriteLine(++i); // so we know where we are
}
File.WriteAllText(@"filtered.csv", read_contents);
}
}
}