Thứ Ba, 23 tháng 4, 2019

Email trích xuất

Đăng Bởi: Admin - tháng 4 23, 2019 - 0 Bình Luận



https://www.codeproject.com/Articles/468402/Emails-Extractor

Chương trình trích xuất email và dữ liệu (tên, điện thoại và giới tính) thuộc về một nhóm người từ tệp văn bản và đặt chúng vào Datagridview có thể được lưu dưới dạng tệp .csv chứa các liên hệ của mọi người có thể được nhập vào tài khoản thư yahoo.

 

Hình ảnh 1 cho Trình trích xuất email

Giới thiệu

Có rất nhiều trang web của công ty / trường đại học chứa danh sách mọi nhà tuyển dụng làm việc trong công ty này, danh sách này chứa tên, email, điện thoại và thậm chí cả địa chỉ cho mỗi nhân viên. những người này trong danh sách yahoo của bạn để liên hệ với họ hoặc hỏi về bất kỳ thông tin nào có thể giúp bạn, nếu họ quan tâm đến sản phẩm của bạn hoặc nếu họ không?.
Nhưng làm thế nào bạn có thể thêm chúng vào danh sách Email của mình? Có đúng không nếu sản phẩm của bạn chỉ dành cho phụ nữ hoặc chỉ dành cho nam giới?, Điều này có nghĩa là bạn sẽ cần thêm thời gian để tìm hiểu xem người này là đàn ông hay phụ nữ !!!.
Email Extractor là một chương trình đơn giản tôi đã bắt đầu khi tôi gặp phải vấn đề này. bằng cách tận dụng những gì đã có của biểu thức Regex trên internet, chương trình này có thể quét một trường văn bản tìm kiếm người và trích xuất tên, điện thoại, email, thậm chí giới tính của họ và rất nhiều điều khác mà bạn có thể cần biết về người này để bắt đầu một liên lạc với anh ta.
Chương trình này không chỉ trích xuất dữ liệu của người này mà còn sắp xếp dữ liệu của anh ta trong điều khiển DataGridView chứa các hàng cho mọi chi tiết có sẵn về người này và qua đó, nó có thể lưu dữ liệu này dưới dạng tệp .CSV mà thư yahoo chấp nhận khi nhập loại tệp để trích xuất danh bạ và chèn các liên hệ này vào thư của bạn. Nó cũng cho phép bạn chỉ định loại dữ liệu nào bạn thực sự cần bằng cách xác định biểu thức Regex của riêng bạn, bạn có thể lưu biểu thức này trong cơ sở dữ liệu dưới tên Nhóm cụ thể để bạn có thể sử dụng chúng sau.
Xử lý dữ liệu bằng cách thực hiện Regex Expressions cũng có sẵn để duy trì và chuẩn bị dữ liệu hỗn hợp để trích xuất dữ liệu cụ thể thuộc về một người theo lập trình.
Trích xuất dữ liệu thuộc về một người từ một nhóm văn bản là gần như không thể, do đó, mọi khối dữ liệu thuộc về một người phải được tách biệt khỏi dữ liệu khác hơn hai khoảng trắng. Điều này sẽ cho phép mã chia dữ liệu thành các khối mỗi khối thuộc về một người cụ thể và bạn cũng có thể chỉ định biểu thức Regex cho phân tách khối văn bản. 

Lý lịch

Yahoo mail là một trong những nhà cung cấp thư phổ biến nhất trên internet, nó cung cấp nhiều công cụ để xử lý email, yahoo cũng cung cấp một công cụ quan trọng, công cụ này là nhập danh bạ, cung cấp khả năng nhập danh bạ từ các liên hệ thư khác (yahoo, Gmail, Vách) hoặc từ các tệp như tệp CSV.

Làm cách nào để thêm tệp giá trị được phân tách bằng dấu phẩy (.CSV) vào liên hệ thư Yahoo của bạn?

1. Mở thư yahoo của bạn.
2. Nhấn vào danh bạ.
3. Thêm một danh sách liên lạc mới.
4. Nhấn danh bạ nhập.
5. Chọn những người khác, người khác để xác định rằng bạn sẽ nhập danh bạ từ một phương thức khác.
6. Đối với bước 1 bỏ chọn một tài khoản yahoo khác.
7. Chọn một chương trình email trên máy tính để bàn (Outlook, Apple Mail, v.v ...).
8. Duyệt đến tệp .CSV cụ thể bạn cần thêm.
9. Nhấn vào tiếp tục. 

Hình 2 cho trình trích xuất email

Biểu thức chính quy là gì?

Biểu thức chính quy là một tập hợp các ký tự chỉ định một mẫu. Thuật ngữ "thường xuyên" không liên quan gì đến chế độ ăn giàu chất xơ. Nó xuất phát từ một thuật ngữ được sử dụng để mô tả ngữ pháp và ngôn ngữ chính thức.
Biểu thức thông thường được sử dụng khi bạn muốn tìm kiếm chỉ định các dòng văn bản có chứa một mẫu cụ thể. Hầu hết các tiện ích UNIX hoạt động trên các tệp ASCII tại một thời điểm. Biểu thức chính quy tìm kiếm các mẫu trên một dòng và không tìm các mẫu bắt đầu trên một dòng và kết thúc trên một dòng khác.
Thật đơn giản để tìm kiếm một từ hoặc chuỗi ký tự cụ thể. Hầu như mọi biên tập viên trên mọi hệ thống máy tính đều có thể làm điều này. Biểu thức thông thường là mạnh mẽ và linh hoạt hơn. Bạn có thể tìm kiếm các từ có kích thước nhất định. Bạn có thể tìm kiếm một từ có bốn nguyên âm trở lên kết thúc bằng "s". Số, ký tự dấu chấm câu, bạn đặt tên cho nó, một biểu thức thông thường có thể tìm thấy nó. Điều gì xảy ra một khi chương trình bạn đang sử dụng tìm thấy nó là một vấn đề khác. Một số chỉ tìm kiếm các mẫu. Những người khác in ra dòng chứa mẫu. Người chỉnh sửa có thể thay thế chuỗi bằng một mẫu mới. Tất cả phụ thuộc vào tiện ích.
Các biểu thức thông thường gây nhầm lẫn cho mọi người vì chúng trông rất giống các tệp khớp với mẫu mà shell sử dụng. Họ thậm chí hành động theo cùng một cách - gần như. Các lậu vuông là tương tự, và dấu hoa thị hoạt động tương tự, nhưng không giống với dấu hoa thị trong một biểu thức thông thường. Cụ thể, shell Bourne, shell C, find và cpio sử dụng các mẫu khớp tên tệp và không phải là biểu thức chính quy.
Hãy nhớ rằng các ký tự meta shell được mở rộng trước khi shell chuyển các đối số cho chương trình. Để ngăn chặn sự mở rộng này, các ký tự đặc biệt trong biểu thức chính quy phải được trích dẫn khi được chuyển dưới dạng tùy chọn từ trình bao. Bạn đã biết làm thế nào để làm điều này bởi vì tôi đã đề cập đến chủ đề này trong hướng dẫn tháng trước.

Tìm kiếm người:

Đây là phương thức chính cho chương trình này, trước tiên nó phân tách dữ liệu văn bản được lấy từ RichtextBox chính (MixedEmailSRichtextBox), bằng cách sử dụng quy tắc chứa 2 khoảng trắng, vì các dữ liệu khác nhau liên quan đến những người khác nhau phải được đặt trước khoảng trắng ([\ n] {2} và sau đó nó nhập chúng vào Phương thức GetP PeopleFromBlock để thực hiện các biểu thức Regex khác nhau để trích xuất dữ liệu liên quan đến người cụ thể như Email, Tên, Số điện thoại, Số.
private void SearchForPeople()
      {
          WrongRegex.Clear();
          string Block = MixedEmailSRichtextBox.Text;  //control contains text data for different people
          string Regex = @"(\n){2,}(\w)*?";
          if (BlockSplitingText.Enabled == true && BlockSplitingText.Text.Length > 0)
              Regex = BlockSplitingText.Text;
          if (BlockSplitingText.Enabled == true && BlockSplitingText.Text.Length > 0)
              Regex = BlockSplitingText.Text;
          List<Person> People = GetPeopleFromBlock(Block, Regex);
          this.EmailsdataGridView.DataSource = PeopleTable(People, GetAdditionalRegexfrom(RegexDataGridView));

      }

      static List<Person> GetPeopleFromBlock(string Data,string RegexSplitting)
      {
          List<Person> MyPData = new List<Person>();
          try
          {
              string[] M = Regex.Split(Data, RegexSplitting); ;

              foreach (var Pdata in M)
              {
                  if (Pdata.Length > 20)
                  {
                      Person newPerson = new Person(Pdata);

                      MyPData.Add(newPerson);
                  }
              }
          }
          catch (Exception e)
          {

              MessageBox.Show(e.Message);
          }

          return MyPData;
      }

Chức năng Bảng người:

Phương thức này nhập danh sách những người được tải với khối dữ liệu của họ và sau đó thực hiện phương thức GetPersonFromBlock để thực thi các biểu thức Regex đã tồn tại trong lớp và người dùng định nghĩa biểu thức Regex bổ sung.

private DataTable PeopleTable(List<Person> People, List<AdditionalRegexExpression> AdditionalRegex)
        {
 
            DataTable PeopleTable = new DataTable();
            AddCoulmnsForPeopleTable(PeopleTable);
            for (int i = 0; i < People.Count; i++)
            {
                DataRow NewPerson = PeopleTable.NewRow();
                List<PersonData> newPErsonData =People[i].GetPersonFromBlock(AdditionalRegex,NoDataWithoutEmail);
                for (int P = 0; P < newPErsonData.Count; P++)
                {
                    if (newPErsonData[P].dataType == null)
                        continue;
                    string ColumnName = newPErsonData[P].dataType.ToString().Replace('_', ' ');
                    if(ColumnName=="Email Address")
                        ColumnName="E-mail Address";
                    if (ColumnName == "Email Display Name")
                        ColumnName = "E-mail Display Name";
                string AlreadyExistedData = NewPerson[ColumnName].ToString();//if there are existed data already
                NewPerson[ColumnName] = AlreadyExistedData + CleanString(newPErsonData[P].Data.ToString());//in case if data contains ',' this will confuse excel program 
                }
                if(newPErsonData.Count>0)
                  PeopleTable.Rows.Add(NewPerson);
            }
            return PeopleTable;
        }
 
         static string CleanString(string X)
        {
            
           return  Regex.Replace(X,RegexExpressionCollection.CleanStringForExcel," "); 
        }

Các tập tin .CSV xuất giải pháp của vấn đề:

Như bạn đã nhận thấy trong đoạn mã trước có phương thức gọi là Clean Chuỗi, phương thức này đóng một quy tắc quan trọng, vì nó loại bỏ bất kỳ dấu hiệu nào có thể gây nhầm lẫn cho chương trình đọc .csv (excel, ..) trong khi anh ta đang sắp xếp các giá trị ô trong các hàng thực hiện một biểu thức regex cụ thể để loại bỏ hôn mê .csv tùy thuộc vào dấu hiệu phân tách tế bào- và các dấu hiệu khác.

public static string CleanStringForExcel { get { return @"\n|\s|\t|\f|\v|\e|,"; } } 

Lớp người:

Lớp này lấy dữ liệu khối trong hàm tạo và thực hiện các biểu thức Regex theo các phương thức đang gọi. Nó cũng chứa một phép liệt kê cho một số cột dưới dạng enum kiểu dữ liệu, có thể chỉ định

class Person
        {
           public enum DataType
            {
                First_Name, Middle_Name, Last_Name, Department, Job_Title, Business_State, Home_Postal_Code, Business_Phone, Home_Phone, Birthday, Email_Address, Email_Display_Name,  Gender,Language, Notes, Web_Page, Business_Fax
            }
          
          
            string DataBlock { get; set; } 
            public Person(string DataBlock)  //gets the data which will be use in data exctraction
            {
                this.DataBlock = DataBlock;
            }
            public PersonData getEmailPersonFromBlock()
            {
 
 
                List<string> Emails = new List<string>();
                Regex emailRegex = new Regex(RegexExpressionCollection.Email,
                       RegexOptions.IgnoreCase);
                //find items that matches with our pattern
                MatchCollection emailMatches = emailRegex.Matches(this.DataBlock);
                foreach (Match emailMatch in emailMatches)
                {
                    Emails.Add(emailMatch.Value);
                }
                //retutn OnlyOneEmail
                if(emailMatches.Count==0)
                    return new PersonData(DataType.Email_Address, "");
                return new PersonData(DataType.Email_Address, Emails[0]);
            }
            public PersonData Gender()
            {
                string Name = GetPersonNameFromBlock()[0].Data;//just First Name;
                return Gender(Name);
            
            }
            // other Regex performing methods
            //.
            //.
            //.
            //.

Lớp Person chứa GetPersonFromBlock thực hiện tất cả các biểu thức Regex có sẵn cùng một lúc và trích xuất dữ liệu cần thiết dưới dạng Person DataType.

public List<PersonData> GetPersonFromBlock(List<AdditionalRegexExpression> AddationalRegex, bool EmailIsMainData)
           {

               PersonData PEmailData = getEmailPersonFromBlock();
               if (!Regex.IsMatch( PEmailData.Data.ToString(),RegexExpressionCollection.Email)&& EmailIsMainData)//if this doesn't match Email Catagory and Email is Needed return empty
                   return new List<PersonData>();
               List<PersonData> PNameData = new List<PersonData>();
               if (PEmailData.Data != "")
                 PNameData =  GetPersonNameFromBlock(PEmailData.Data.ToString()); //if Name is Empty Take Email first part as name
               PersonData PPhone = GetPhonePersonFormBlock();
               PersonData PbirthDaY = GetPhonePersonBirthDate();
               PersonData PEMialDisplayName = new PersonData();
                   if(PNameData.Count>0)
                PEMialDisplayName = new PersonData(DataType.Email_Display_Name, PNameData[0].Data);
               PersonData PPostalCode = GetPersonPostalCodeFromBlocK();

               PersonData Gender = new PersonData();
               if(PNameData.Count>0)
                   Gender=  this.Gender(PNameData[0].Data);
               PersonData Notes = new PersonData(DataType.Notes,this.DataBlock); //just in Case The Data Was Wrong U have to consider that every thing beside Email is Notes
               PersonData WebPage = GetPersonWebPageFromBlock();
               PersonData Business_Phone = GetPersonBussinessPhone();
               PersonData Lang = GetPersonLanguage();
               PersonData Business_Fax = getPersonBusinessFax();
               PersonData Business_State = GetPersonBusiness_State();
               PersonData Jop_Tile = new PersonData(DataType.Job_Title, Business_State.Data);
               PersonData Department = GetPersonDepartment();
               List<PersonData> AddaationalData = GetAddationalData(AddationalRegex);
               List<PersonData> TotalData = new List<PersonData>();
               TotalData.AddRange(PNameData);
               TotalData.AddRange(new List<PersonData> { Business_Fax, PEmailData, PPhone, PbirthDaY, PEMialDisplayName, PPostalCode, Gender, Notes, WebPage, Business_Phone, Lang, Business_State, Jop_Tile, Department });
               TotalData.AddRange(AddaationalData);//it must be at last becuase it maybe erase data taken by another regex
               return TotalData;

           }
           private string[] StringSplittededBySpace(string Data)
           {
               return Regex.Split(Data, @"[\s|\.|\,|\-]+?");
           }
           static List<int> WrongRegex = new List<int>();

Điều này rất quan trọng vì nó thực hiện các biểu thức Regex được thêm vào bảng Biểu thức Regex đã được xác định bởi người dùng.

public List<PersonData> GetAddationalData(List<AdditionalRegexExpression> AdditionalRegex)
         {
             List<PersonData> AdditionalData = new List<PersonData>();
             for (int i = 0; i < AdditionalRegex.Count; i++)
             {
                 if (WrongRegex.Contains(i))
                     continue;
                 try
                 {
                     MatchCollection RegexMatches = Regex.Matches(this.DataBlock, AdditionalRegex[i].RgExp.ToString());
                     int count = 0;
                     if (AdditionalRegex[i].NumOfResults == 0)
                     {
                         count = RegexMatches.Count;
                     }
                     else
                         count = AdditionalRegex[i].NumOfResults;
                     if (RegexMatches.Count < count)
                         count = RegexMatches.Count;
                     string Data = "";
                     for (int c = 0; c < count; c++)
                     {
                         Data += RegexMatches[c].Value.ToString();
                     }
                     string targetColumn = AdditionalRegex[i].RgNam;
                     AdditionalData.Add(new PersonData(targetColumn, Data));
                 }
                 catch (Exception e)
                 {
                     WrongRegex.Add(i);
                     throw e;
                 }

             }
             return AdditionalData;
         }

     }

Loại biểu thức Regex:

Khi người dùng chọn thêm Biểu thức Regex mới trong Bảng biểu thức Regex, cột mục tiêu mà dữ liệu trích xuất sẽ được lưu trữ phải được xác định và cũng là số lượng kết quả.

class AdditionalRegexExpression
   {
       public AdditionalRegexExpression(string Name, string Regex,int NumberOfResults)
       {
           this.RgNam = Name;
           this.RgExp = Regex;
           this.NumOfResults = NumberOfResults;
       }

       public string RgExp { get; set; } // The Regex Expression

       public string RgColumnTarget { get; set; }  //The targeted column

       public int NumOfResults { get; set; }  //the number of Results as defined by user
   }

Mở tệp văn bản trong hộp văn bản Rich :

Phương pháp này được sử dụng để tải dữ liệu hỗn hợp từ tệp văn bản trong điều khiển Richtextbox, dữ liệu hỗn hợp này sẽ được sử dụng để trích xuất dữ liệu liên quan đến những người khác nhau. khả năng phân biệt dữ liệu liên quan đến người cụ thể với người khác kiểm soát độ chính xác của kết quả trích xuất phụ thuộc vào:

1) Phải có nhiều hơn 2 khác \ khoảng (khoảng cách) giữa các liên quan đến những người khác nhau; điều này sẽ giúp chương trình phân chia dữ liệu này một cách chính xác và đẩy chúng vào quá trình trích xuất dữ liệu.

2) Nếu có một Regex khác được nhập bởi người dùng, nó phải chính xác và tồn tại giữa các khối người.

3) Có sự đồng nhất dữ liệu. Khác biệt phải giống như một quy tắc chung cho các loại dữ liệu khác nhau, giống như Tel chỉ có một loại dữ liệu như Email.

using (OpenFileDialog dlgOpen = new OpenFileDialog())
           {
               try
               {
                   // Available file extensions
                   dlgOpen.Filter = "All files(*.*)|*.*";
                   // Initial directory
                   dlgOpen.InitialDirectory = "D:";
                   // OpenFileDialog title
                   dlgOpen.Title = "Open";
                   // Show OpenFileDialog box
                   if (dlgOpen.ShowDialog() == DialogResult.OK)
                   {
                       // Create new StreamReader
                       StreamReader sr = new StreamReader(dlgOpen.FileName, Encoding.Default);
                       // Get all text from the file
                       string str = sr.ReadToEnd();
                       // Close the StreamReader
                       sr.Close();
                       // Show the text in the rich textbox rtbMain

                       MixedEmailSRichtextBox.Text = str;
                   }
               }
               catch (Exception errorMsg)
               {
                   MessageBox.Show(errorMsg.Message);
               }
         }

Regex khác nhau cho dữ liệu:

Class RegexExpressionCollection chứa một số Biểu thức Regex có sẵn rất quan trọng và sẽ giúp bạn xác định các chi tiết quan trọng về người này. Chúng ta hãy đồng ý rằng tất cả các biểu thức Regex ở đây có thể được ghi đè bằng cách thêm biểu thức Regex mới và điều chỉnh mục tiêu cột theo ý muốn.
1. Số fax Regex:
Vì sự khác biệt duy nhất giữa Fax và số điện thoại là số fax được đi trước với fax từ , do đó, Regex tìm kiếm fax từ làm khóa chung để phân biệt giữa fax và số điện thoại.

public static string Fax{ get { return @"Fax:\s[+]*([\d+[-]*)+"; }}

2. 2. Số điện thoại Regex:
public static string Phone { get { return @"(Tel|phone|telephone|mobile):\s[+]*([\d+[-]*)+"; }  }
3. Trang web: 
Có nhiều biểu thức Regex khác nhau cho trang web, đây là cách đơn giản và chính xác nhất mà tôi đã tìm thấy. 
public static string WebPage{get { return @"(http|https|ftp)\://[a-zA-Z0-9\-\.]+\.[a-zA-Z]{2,3}(:[a-zA-Z0-9]*)?/?([a-zA-Z 0-9\-\._\?\,\'/\\\+&%\$#\=~])*"; } } 

4. Ngày sinh:
public static string BirthDate{get { return @"Fax:\s[+]*([\d+[-]*)+"; } } 
5. Email:
Vì Email là thứ quan trọng nhất bạn có ở đây, nếu phương pháp này không tiết lộ bất kỳ giá trị nào, chương trình sẽ tự động xóa nó khỏi kết quả, trừ khi bạn đánh dấu vào hộp kiểm có tiêu đề, không xóa kết quả Email.
public static string Email{get { return @"\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*"; } }
6. Giới tính:
Đoán giới tính cho mọi khách hàng là rất quan trọng, điều này sẽ xác định xem người này có thực sự quan tâm đến sản phẩm của bạn hay không. Giả sử bạn đã được cung cấp một danh sách gửi thư dài và phải viết một chương trình để xác định xem mỗi tên trong danh sách đại diện cho nam hay nữ, có lẽ vì vậy bạn có thể mở đầu mỗi tên bằng "Mr." hoặc "bà" trong lời chào của một mẫu thư. Bạn sẽ làm điều này như thế nào? Giải pháp đầu tiên xuất hiện trong đầu có thể là tạo một bảng gồm mỗi tên cá nhân và giới tính thường được liên kết với nó. Sau đó, đối với mỗi tên trong danh sách gửi thư, hãy tìm giới tính tương ứng trong bảng, rất có thể là sử dụng hàm băm cho tốc độ .
Cách tiếp cận như vậy có hai vấn đề chính. Đầu tiên, các biến thể về chính tả, dù nhẹ đến đâu, sẽ đánh bại thuật toán. Một con người có thể nói rằng Caren, Caryn, Karyn và Karin đều là những biến thể của cùng một tên, nhưng thuật toán tra cứu bảng thì không thể. Nếu một trong bốn cách viết đó không có trong bảng, chương trình sẽ không thể khớp tên đó với giới tính. Thứ hai, việc gõ hàng ngàn cặp tên-giới tính vào một bảng rất tốn thời gian và dễ bị lỗi. Hơn nữa, bạn có thể không bao giờ có một danh sách đầy đủ vì cách viết biến thể. Điều gì sẽ xảy ra nếu tôi nói với bạn một chương trình phát hiện giới có thể được viết bằng khoảng 50 dòng mã và dữ liệu.
thay vì khớp văn bản thẳng, chương trình khớp với các mẫu trong văn bản. Chiến lược nói rằng nếu một tên khớp với một mẫu chữ cái nhất định, thì nó phải là một giới tính nhất định. Ví dụ: nếu tên chứa chuỗi ký tự ann (chữ hoa hoặc chữ thường), thì đó phải là nữ (không bao gồm tên nước ngoài, chữ viết tắt của Tên tiếng Anh, và tên am-biguity). Quy tắc này bắt được rất nhiều tên, bao gồm Ann, Anna, Annabelle, Annacarol, Annalisa, Annaliz, Annamarie, Anne, Anne-marie, Annette, Annie đấm
Một số lợi thế có liên quan đến việc sử dụng phương pháp khớp mẫu, thậm chí vượt quá lượng thời gian được lưu bằng cách không phải nhập hàng ngàn tên và giới tính liên quan của chúng vào một bảng. Đầu tiên, chương trình thường sẽ hoạt động với một tên hoặc biến thể của tên chưa gặp. Thứ hai, và trong một tĩnh mạch tương tự, các loại tên và sai chính tả vẫn có xu hướng mang lại cùng giới tính như phiên âm chính xác. Và thứ ba, chương trình được đảm bảo trả lại giới tính cho bất kỳ tên nào được đặt. Bạn không thể bỏ mã.
Những bộ sưu tập của Regex được tiết lộ trang "Chương trình yiWK tour du lịch-de-lực lượng này cho thấy những điểm mạnh và điểm yếu của mô hình dựa trên luật lệ và sẽ chứng minh hữu ích cho các lập trình viên mailing-list” dự đoán GIỚI đặt một cái tên FIRST Scott Pakin, tháng 8 năm 1991 lawker .googlecode.com / svn / tủ lạnh / chia sẻ / pdf / pakin1991.pdf 
·Tên nam Regex: 
public static bool IsMale(string Name)
{
       string[] ArrayOfRegex = {

       "^[^S].*r[rv]e?y?$"                       //{ sex = ,"m," }  # Barry, Larry, Perry,...
      ,"^[^G].*v[ei]$"                           //{ sex = ,"m," }  # Clive, Dave, Steve,...
      ,"^[^AJKLMNP][^o][^eit]*([glrsw]ey|lie)$"  //{ sex = ,"m," }  # Dewey, Stanley, Wesley,...
      ,"^[CGJWZ][^o][^dnt]*y$"                   //{ sex = ,"m," }  # Gregory, Jeremy, Zachary,...
      ,"^.*[Rlr][abo]y$"                         //{ sex = ,"m," }  # Leroy, Murray, Roy,...
      ,"^.*[GRguw][ae]y?ne$"                     //{ sex = ,"m," }  # Duane, Eugene, Rene,...
      ,"^[CLMQTV].*[^dl][in]c.*[ey]$"            //{ sex = ,"m," }  # Lance, Quincy, Vince,...
      ,"^.*[ay][dl]e$"                           //{ sex = ,"m," }  # Clyde, Kyle, Pascale,...
      ,"^[^o]*ke$"                               //{ sex = ,"m," }  # Blake, Luke, Mike,...
      ,"^[^EL].*o(rg?|sh?)?(e|ua)$"              //{ sex = ,"m," }  # George, Joshua, Theodore,..
      ,"^[^JPSWZ].*[denor]n.*y$"                 //{ sex = ,"m," }  # Anthony, Henry, Rodney,...
      ,"^Br[aou][cd].*[ey]$"                     //{ sex = ,"m," }  # Bradley, Brady, Bruce,...
      ,"^[ILW][aeg][^ir]*e$"                     //{ sex = ,"m," }  # Ignace, Lee, Wallace,...
      ,"^[ABEIUY][euz]?[blr][aeiy]$"             //{ sex = ,"m," }  # Ari, Bela, Ira,...
      ,"^[ART][^r]*[dhn]e?y$"                    //{ sex = ,"m," }  # Randy, Timothy, Tony,...
      ,"^.*oi?[mn]e$"                            //{ sex = ,"m," }  # Antoine, Jerome, Tyrone,...
      ,"^D.*[mnw].*[iy]$"                        //{ sex = ,"m," }  # Danny, Demetri, Dondi,...
      ,"^[^BG](e[rst]|ha)[^il]*e$"               //{ sex = ,"m," }  # Pete, Serge, Shane,...

                               };

    for (int i = 0; i < ArrayOfRegex.Length; i++)
       if(Regex.IsMatch(Name,ArrayOfRegex[i]))
        return true;

    return false;
}
· Tên nữ Regex
public static string[] Male{get{
return new string[]{
"^[^S].*r[rv]e?y?$"                       //{ sex = ,"m," }  # Barry, Larry, Perry,...
,"^[^G].*v[ei]$"                           //{ sex = ,"m," }  # Clive, Dave, Steve,...
,"^[^AJKLMNP][^o][^eit]*([glrsw]ey|lie)$"  //{ sex = ,"m," }  # Dewey, Stanley, Wesley,...
,"^[CGJWZ][^o][^dnt]*y$"                   //{ sex = ,"m," }  # Gregory, Jeremy, Zachary,...
,"^.*[Rlr][abo]y$"                         //{ sex = ,"m," }  # Leroy, Murray, Roy,...
,"^.*[GRguw][ae]y?ne$"                     //{ sex = ,"m," }  # Duane, Eugene, Rene,...
,"^[CLMQTV].*[^dl][in]c.*[ey]$"            //{ sex = ,"m," }  # Lance, Quincy, Vince,...
,"^.*[ay][dl]e$"                           //{ sex = ,"m," }  # Clyde, Kyle, Pascale,...
,"^[^o]*ke$"                               //{ sex = ,"m," }  # Blake, Luke, Mike,...
,"^[^EL].*o(rg?|sh?)?(e|ua)$"              //{ sex = ,"m," }  # George, Joshua, Theodore,..
,"^[^JPSWZ].*[denor]n.*y$"                 //{ sex = ,"m," }  # Anthony, Henry, Rodney,...
,"^Br[aou][cd].*[ey]$"                     //{ sex = ,"m," }  # Bradley, Brady, Bruce,...
,"^[ILW][aeg][^ir]*e$"                     //{ sex = ,"m," }  # Ignace, Lee, Wallace,...
,"^[ABEIUY][euz]?[blr][aeiy]$"             //{ sex = ,"m," }  # Ari, Bela, Ira,...
,"^[ART][^r]*[dhn]e?y$"                    //{ sex = ,"m," }  # Randy, Timothy, Tony,...
,"^.*oi?[mn]e$"                            //{ sex = ,"m," }  # Antoine, Jerome, Tyrone,...
,"^D.*[mnw].*[iy]$"                        //{ sex = ,"m," }  # Danny, Demetri, Dondi,...
,"^[^BG](e[rst]|ha)[^il]*e$"  };           //{ sex = ,"m," }  # Pete, Serge, Shane,...; }}}

7. Và những biểu hiện khác của Regex

Lưu tệp DataGridView dưới dạng tệp giá trị được phân tách bằng dấu phẩy (CSV):

Phương thức này được sử dụng để lưu DataGridView dưới dạng tệp giá trị được phân tách bằng dấu phẩy, trước tiên, nó sử dụng StringBuilder để trích xuất tên cột sau đó thêm vào các cột, xác định chuỗi này là giá trị cột -.csv lấy các hàng đầu tiên làm tên cột và chuỗi tiếp theo làm giá trị hàng - phương pháp này rất đơn giản và độ chính xác rất thấp vì nếu dữ liệu có chứa, thì chương trình excel sẽ bị nhầm lẫn, kết quả sẽ là các đơn đặt hàng giá trị không chính xác.
private void ExtractDataToCSV(DataGridView dgv)
{

    // Don't save if no data is returned
    if (dgv.Rows.Count == 0)
    {
        return;
    }
    StringBuilder sb = new StringBuilder();
    // Column headers
    string columnsHeader = "";
    for (int i = 0; i < dgv.Columns.Count; i++)
    {
        columnsHeader += dgv.Columns[i].Name + ",";
    }
    sb.Append(columnsHeader + Environment.NewLine);
    // Go through each cell in the datagridview
    foreach (DataGridViewRow dgvRow in dgv.Rows)
    {
        // Make sure it's not an empty row.
        if (!dgvRow.IsNewRow)
        {
            for (int c = 0; c < dgvRow.Cells.Count; c++)
            {
                // Append the cells data followed by a comma to delimit.

                sb.Append(dgvRow.Cells[c].Value + ",");
            }
            // Add a new line in the text file.
            sb.Append(Environment.NewLine);
        }
    }
    // Load up the save file dialog with the default option as saving as a .csv file.
    SaveFileDialog sfd = new SaveFileDialog();
    sfd.Filter = "CSV files (*.csv)|*.csv";
    if (sfd.ShowDialog() == System.Windows.Forms.DialogResult.OK)
    {
        // If they've selected a save location...
        using (System.IO.StreamWriter sw = new System.IO.StreamWriter(sfd.FileName, false))
        {
            // Write the stringbuilder text to the the file.
            sw.WriteLine(sb.ToString());
        }
    }
    // Confirm to the user it has been completed.
    MessageBox.Show("CSV file saved.");
}

Lưu biểu thức Regex trong cơ sở dữ liệu:

Có một cơ sở dữ liệu tích hợp mà bạn có thể sử dụng để lưu mã của mình để bạn có thể sử dụng mã đó vào một lần khác, trước tiên bạn phải nhấp vào nút mới của nhóm Nhóm mới, nhập tên nhóm vào hộp văn bản và sau đó nhấn vào Lưu cơ sở dữ liệu. được thêm vào hộp thả xuống.

Phản Hồi Độc Giả

Một số lưu ý khi bình luận

Mọi bình luận sai nội quy sẽ bị xóa mà không cần báo trước (xem nội quy)

Bấm Thông báo cho tôi bên dưới khung bình luận để nhận thông báo khi admin trả lời

Để bình luận một đoạn code, hãy mã hóa code trước nhé