Từ 1 tới 7 trên tổng số 7 kết quả

Đề tài: Xử lý String và Regular Expressions (Regex Class) Trong C#

  1. #1
    Ngày gia nhập
    08 2011
    Bài viết
    27

    Mặc định Xử lý String và Regular Expressions (Regex Class) Trong C#

    Tìm hiểu String và Regular Expressions(Regex) Trong C#
    I. Introduction
    - String là kiểu dữ liệu được sử dụng nhiều nhất trong lập trình, hầu như trong các ứng dụng trên Web hay Windows đề sử dụng String rất nhiều.
    - Biểu thức chính qui – Regex là 1 chuổi biểu thức dùng làm khuôn mẫu để so sánh các chuổi khác có khớp với nó hay không .
    - Việc thấm nhuần về String là điều hết sức quan trọng trong lập trình.
    - Trong bài này mình xin chia sẻ về cách sử dụng String cũng như Regex trong ngôn ngữ lập trình C#.
    II. Fundamental
    1.String :
    a. Cách khai báo và tạo 1 chuổi :
    Visual C# Code:
    1. String str = "phamnguyen.info";
    2. string strings = "pham nguyen";
    - Về mặt sử dụng khi chúng ta khai báo bằng String hay string là hoàn toàn như nhau.
    - Ngoài ra chúng ra có thể khởi tạo String từ một mảng char :
    Visual C# Code:
    1. // Khoi tao mang ky tu
    2. char[] chars = {'c','s','h','a','r','p'};
    3. // Khoi tao chuoi bang mang ky tu
    4. string str = new string(chars);
    5. // Ket qua khi xuat str se duoc : csharp
    - Để biết độ dài của một chuổi ta dùng thuộc tính Length
    Visual C# Code:
    1. using System;
    2. using System.Collections.Generic;
    3. using System.Linq;
    4. using System.Text;
    5. namespace Sample
    6. {
    7.     class Program
    8.     {
    9.         static void Main(string[] args)
    10.         {
    11.             String str = "pham phuong nguyen";
    12.             Console.WriteLine("Độ dài chuổi: {0}",str.Length);
    13.         }
    14.     }
    15. }
    16. // Kết quả : Độ dài chuổi: 18
    - Ngoài ra để chuyển kiểu 1 kiểu dữ liệu nào đó về String chúng ta dùng phương thức ToString() :
    Visual C# Code:
    1. using System;
    2. using System.Collections.Generic;
    3. using System.Linq;
    4. using System.Text;
    5. namespace Sample
    6. {
    7.     class Program
    8.     {
    9.         static void Main(string[] args)
    10.         {    
    11.             int Number = 10;
    12.             String Str = Number.ToString();
    13.             Console.WriteLine("Number is " + Str);
    14.         }
    15.     }
    16. }
    17. // Kết quả: Number is 10
    b. Các Thao tác trên String :
    - Có rất nhiều thao tác trên String , ở đây mình xin liệt kê một số thao tác thường sử dụng:

    Phương thức, Ý nghĩa
    Compare() So sánh 2 chuổi (chuổi 1 ? chuổi 2) = (-1,0,1) tương ứng với (<,=,>)
    Concat() Nối chuổi
    EndsWith() Xem chuổi kết thúc bằng 1 nhóm ký tự xác định hay không
    IndexOf() tìm vị trí xuất hiện đầu tiên của 1 chuổi con trong 1 chuổi lớn
    Insert() Trả về 1 chuổi mới đã được chèn thêm
    LastIndexOf() Trả về vị trí xuất hiện cuối cùng của 1 chuổi con trong 1 chuổi lớn
    Length Chiều dày của chuổi
    Remove() Xóa đi 1 chuổi con
    Replace() Thay thế 1 chuổi cũ bằng chuổi mới
    Split() Trả về vị trí chuổi con đượng phân định ký tự xác định
    StartsWith() Xem chuổi có bắt đầu bằng 1 nhóm ký tự nhác định hay không
    Substring() Lấy chuổi con.
    ToUpper() Trả về bản sao của chuổi kiểu In Hoa
    ToLower() Trả về bản sau của chuổi kiểu thường
    Sau đây mình có 1 Sample đơn giản để minh họa cho String :
    - Tạo 1 Windows Form đơn giản
    Kết quả :
    Click vào hình ảnh để lấy hình ảnh lớn

Tên:		String.png
Lần xem:	5
Size:		27.9 KB
ID:		8254
    C# Code :
    Visual C# Code:
    1. using System;
    2. using System.Collections.Generic;
    3. using System.ComponentModel;
    4. using System.Data;
    5. using System.Drawing;
    6. using System.Linq;
    7. using System.Text;
    8. using System.Windows.Forms;
    9. namespace StringSample
    10. {
    11.     public partial class StringDemo : Form
    12.     {
    13.         String StringOne;
    14.         String StringTwo;
    15.         public StringDemo()
    16.         {
    17.             InitializeComponent();
    18.             this.btn_COMPARE.Click += new EventHandler(btn_COMPARE_Click);
    19.             this.btnCompare.Click += new EventHandler(btnCompare_Click);
    20.             this.btnConcat.Click += new EventHandler(btnConcat_Click);
    21.             this.btnExit.Click += new EventHandler(btnExit_Click);
    22.             this.btnIndexOf.Click += new EventHandler(btnIndexOf_Click);
    23.             this.btnInsert.Click += new EventHandler(btnInsert_Click);
    24.             this.btnReplace.Click += new EventHandler(btnReplace_Click);
    25.             this.btnSubstring.Click += new EventHandler(btnSubstring_Click);
    26.         }
    27.         void btnSubstring_Click(object sender, EventArgs e)
    28.         {
    29.             StringOne = txtStringOne.Text;
    30.             StringTwo = txtStringTwo.Text;
    31.             int i = StringOne.IndexOf(StringTwo);
    32.             lblKetQua.Text = StringOne.Substring(i);
    33.         }
    34.         /// <summary>
    35.         /// Thay thế chuổi 2 trong chuổi một bằng 1 chuổi khác
    36.         /// </summary>
    37.         /// <param name="sender"></param>
    38.         /// <param name="e"></param>
    39.         void btnReplace_Click(object sender, EventArgs e)
    40.         {
    41.             StringOne = txtStringOne.Text;
    42.             StringTwo = txtStringTwo.Text;
    43.             int i = StringOne.IndexOf(StringTwo);
    44.             String text = "Microsoft";
    45.             lblKetQua.Text = StringOne.Replace(StringTwo, text);
    46.         }
    47.  
    48.         void btnInsert_Click(object sender, EventArgs e)
    49.         {
    50.             StringOne = txtStringOne.Text;
    51.             StringTwo = txtStringTwo.Text;
    52.         }
    53.  
    54.         void btnIndexOf_Click(object sender, EventArgs e)
    55.         {
    56.             StringOne = txtStringOne.Text;
    57.             StringTwo = txtStringTwo.Text;
    58.             int Index = StringOne.IndexOf(StringTwo);
    59.             lblKetQua.Text = "Vị trí tìm thấy chuổi 2 trong chuổi 1"
    60.             + Index.ToString();
    61.         }
    62.  
    63.         void btnExit_Click(object sender, EventArgs e)
    64.         {
    65.             this.Close();
    66.         }
    67.  
    68.         void btnConcat_Click(object sender, EventArgs e)
    69.         {
    70.             StringOne = txtStringOne.Text;
    71.             StringTwo = txtStringTwo.Text;
    72.             lblKetQua.Text = String.Concat(StringOne, StringTwo);
    73.         }
    74.         /// <summary>
    75.         /// So Sánh 2 chuổi phân biệt chư thường chữ Hoa
    76.         /// </summary>
    77.         /// <param name="sender"></param>
    78.         /// <param name="e"></param>
    79.         void btnCompare_Click(object sender, EventArgs e)
    80.         {
    81.             StringOne = txtStringOne.Text;
    82.             StringTwo = txtStringTwo.Text;
    83.             int kq = String.Compare(StringOne, StringTwo);
    84.             lblKetQua.Text = txtStringOne.Text;
    85.             if (kq == -1)
    86.                 lblKetQua.Text += " < ";
    87.             else if (kq == 1)
    88.                 lblKetQua.Text += " > ";
    89.             else
    90.                 lblKetQua.Text += " = ";
    91.             lblKetQua.Text += txtStringTwo.Text;
    92.         }
    93.         /// <summary>
    94.         /// So Sánh 2 cuổi không phân biệt chữ thường chử hoa
    95.         /// </summary>
    96.         /// <param name="sender"></param>
    97.         /// <param name="e"></param>
    98.         void btn_COMPARE_Click(object sender, EventArgs e)
    99.         {
    100.             StringOne = txtStringOne.Text;
    101.             StringTwo = txtStringTwo.Text;
    102.             int kq = String.Compare(StringOne, StringTwo,true);
    103.             lblKetQua.Text = txtStringOne.Text;
    104.             if (kq == -1)
    105.                 lblKetQua.Text += " < ";
    106.             else if (kq == 1)
    107.                 lblKetQua.Text += " > ";
    108.             else
    109.                 lblKetQua.Text += " = ";
    110.             lblKetQua.Text += txtStringTwo.Text;
    111.         }
    112.     }
    113. }

    2. Regex

    - Trong thực tế chúng ta thường thấy các trang Web dùng Regex để kiểm tra định dạng của 1 chuổi Input xem có hợp lệ hay ko, thường là khi đăng ký account nào đó, nếu định dạng ko khớp với định dạng cho trc thì hệ thống sẽ thông báo, như email chẳng hạn, nếu chúng ta quy định là email phải có @….Com, thì hiển nhiên khi đăng ký mà ko có chữ @ hệ thống sẽ báo lỗi ngay.
    - VD dau đây để so khớp định dạng chuổi Email :
    String pattern = "^(\w+@\w+\.\w+)$";
    - Biểu thức chính quy được xây dựng dựa vào ký tự đại diện và những nguyên tắc sau :
    Ký tự đại diện
    [0-9] hay \d: đại diện 1 ký tự số từ 0 – 9
    [0-9a-zA-Z_] hay \w: Đại diện ký tự aphabet hay ký tự gạch chân(hoa thường).
    .(dấu chấm): đại diện ký tự bất kỳ.
    \s : đại diện ký tự trắng (\r\n\t\f)
    [xyz] đại diện 1 ký tự x,y hặc z.
    \D: đại diện ký tự không thuộc \d
    \W : đại diện ký tự không thuộc \w
    [^xyz]: đại diện ký tự không thuộc xyz.
    ^: chỉ ra ký tự bắt đầu
    $: chỉ ra ký tự kết thúc
    \\,\.,\$,\^: đại diện ký tự ‘\,’.’,’$’,’^’.
    Số lần xuất hiện :
    {n,m}: ít nhất n lần, nhiều nhất m lần
    {,m}: nhiều nhất m lần
    {n,}: ít nhất n lần
    {n}: chính xác n lần
    ?: tương đương {0,1}
    * : tương dương {0,vô cùng}
    + : tương đương {1,vô cùng}
    KHÔNG CHỈ ĐỊNH: 1 lần

    Ví dụ :
    // Số chứng minh nhân dân 9 ký tự
    String cmnd = "[0-9]{9}";
    // số điện thoại 10 số hay 11 số
    // bắt đầu bằng 0
    String PhoneNumber = "0\d{9,10}";
    // Số xe máy Sài Gòn : VD như 51-Z8-111.11
    String MotoNumber = "5\d-[A-Z]\d-\d{3}.\d{2}";
    // Địa chỉ Email
    String Email = "\w+.@\w+.\w{2,4}";
    - Khi đã hiểu được cách lập biểu thức chính qui chúng ta có thể kiểm tra một chuổi bất kỳ xem có đúng định dạng hay không, cách đơn giản nhất là dùm phương thức IsMach().
    bool Regex.IsMach(String input,String Pattern);
    - Ví dụ :
    Visual C# Code:
    1. // Kiểm tra định dạng chuổi nhập vào là Email
    2. String EmailPattern = "\w+.@\w+.\w{2,4}";
    3. String input = "pham.nguyen@hotmail.com"
    4. // Nếu như chuổi không hợp lệ
    5. if(!Regex.IsMatch(input,EmailPattern))
    6. {
    7.     // Do Somethings
    8. }
    9. {    //
    10. }
    - Một điều cần lưu ý là để sử dụng Regex chúng ta phải khai báo namespace System.Text.RegularExpressions trước.

    III. Advanced
    Để hiểu rõ hơn về String và Regex chúng ta cùng nhau làm 1 Demo đơn giản là nhập các thông tin như họ tên, sử thích, ngày sinh, email, CMND và sau đó lưu ra file .
    Kết quả :
    Click vào hình ảnh để lấy hình ảnh lớn

Tên:		Regex.png
Lần xem:	24
Size:		36.9 KB
ID:		8255
    C# code
    Visual C# Code:
    1. using System;
    2. using System.Collections.Generic;
    3. using System.ComponentModel;
    4. using System.Data;
    5. using System.Drawing;
    6. using System.Linq;
    7. using System.Text;
    8. using System.Windows.Forms;
    9. using System.Text.RegularExpressions;
    10. using System.IO;
    11. namespace SearchAndReplace
    12. {
    13.     public partial class RegexDemo : Form
    14.     {
    15.         public RegexDemo()
    16.         {
    17.             InitializeComponent();
    18.         }
    19.         private void btnSave_Click(object sender, EventArgs e)
    20.         {
    21.             if (String.IsNullOrEmpty(txtHo.Text) || String.IsNullOrEmpty(txtTen.Text))
    22.                 lblWarning.Text = "khong de trong ho va ten";
    23.             else if ((DateTime.Now.Year - dtpNgaySinh.Value.Year) < 20)
    24.                 lblWarning.Text = "tuoi nhan vien ko duoc duoi 20";
    25.             else if (double.Parse(txtLuong.Text) < 9000000)
    26.                 lblWarning.Text = "Luong toi thieu la 9tr";
    27.             else if (!Regex.IsMatch(txtSoCMND.Text, @"^([0-9]{9})$"))
    28.                 lblWarning.Text = "So CMND ko hop le";
    29.             else if (!Regex.IsMatch(txtEmail.Text, @"^(\w+@\w+\.\w+)$"))
    30.                 lblWarning.Text = "Email ko hop le";
    31.             else if (!Regex.IsMatch(txtMobile.Text, @"^(0\d{9,10})$"))
    32.                 lblWarning.Text = "So Phone ko hop le";
    33.             else if (!Regex.IsMatch(txtSoXeMay.Text, @"^(5\d-[A-Z]\d-\d{3}\.\d{2})$"))
    34.                 lblWarning.Text = "So Xe ko hop le";
    35.             else
    36.             {
    37.                 String dingdang = "Ho va Ten: {0} \r\nNgay Sinh:"
    38.                 +"{1: MMMM dd, yyyy} \r\nLuong: {2:c} \r\nSoThich {3}";
    39.  
    40.                 String hoten = String.Concat(txtHo.Text, txtTenDem.Text, txtTen.Text);
    41.                 DateTime ngaysinh = dtpNgaySinh.Value;
    42.                 double luong = double.Parse(txtLuong.Text);
    43.                 String[] MangSoThich = new String[lstSoThich.SelectedItems.Count];
    44.                 for (int i = 0; i < lstSoThich.SelectedItems.Count; i++)
    45.                 {
    46.                     MangSoThich[i] = lstSoThich.SelectedItems[i].ToString();
    47.                 }
    48.                 String SoThich = String.Join(", ",MangSoThich);
    49.                 String thongtin = String.Format(dingdang, hoten, ngaysinh, luong,SoThich);
    50.                 MessageBox.Show(thongtin);
    51.                 String TenFile = "C:/NhanVien.txt";
    52.                 File.WriteAllText(TenFile,thongtin);
    53.             }
    54.  
    55.         }
    56.     }
    57. }
    Nguồn phamnguyen.info
    Đã được chỉnh sửa lần cuối bởi HuyenTran2011 : 19-11-2011 lúc 04:33 PM.

  2. #2
    Ngày gia nhập
    11 2010
    Bài viết
    1

    Bài viết rất hay về string, thank nhiều

  3. #3
    Ngày gia nhập
    12 2010
    Bài viết
    10

    hiểu thêm rất nhiều, cảm ơn bạn đã share kiến thức !

  4. #4
    Ngày gia nhập
    04 2009
    Bài viết
    108

    Những chia sẻ rất hay của chủ thớt. Thanks
    Ai đã gieo vào lòng Ai nỗi nhớ
    Để vì Ai sóng vỗ những đêm dài
    Ai có biết vì Ai-Ai không ngủ
    Trằn trọc hoài nỗi nhớ của riêng Ai.

  5. #5
    Ngày gia nhập
    11 2010
    Bài viết
    41

    dùng cái này cũng hay lắm nè, có sẵn 1 số library về regex lun
    Regex Magic


    p/s cái này chỉ cho dùng demo trong mấy ngày thôi, nên nhanh chân copy hết ra để sau này dùng tới
    i dont care who are u, where yr from, what u did , as long as u love me

  6. #6
    Ngày gia nhập
    09 2012
    Bài viết
    1

    Mặc định Xử lý String và Regular Expressions (Regex Class) Trong C#

    Mình loay hoay mãi để tìm cách nhập một số bất kỳ mà không có được.
    Có thể là số âm, số dương, số thập phân, không cho số 0 đứng đầu (...)

  7. #7
    Ngày gia nhập
    06 2009
    Bài viết
    405

    cho mình hỏi cái pattern để tìm kiếm một ký tự không phải số bất kì mà kí tự đó không phải là kí tự mà mình chỉ định trong chuỗi là gì?
    VD:
    "397j6+d4n)29ka9", tìm tất cả những ký tự word (ở đây là + j d n k a), trừ kí tự ")"
    "9*23d34jk9a@879", tìm tất cả những ký tự word (ở đây là * d j k a), trừ kí tự "@"

    tức là một ký tự word (\D) mà không phải là một (hay nhiều) ký tự do mình chỉ định và không phải từ 0-9 ([^0-9])

Các đề tài tương tự

  1. Ai đó làm một bài về Regular Expressions trong C đi?
    Gửi bởi muramasa trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 0
    Bài viết cuối: 20-06-2011, 09:18 PM
  2. cách dùng regular expressions trong c# như thế nào?
    Gửi bởi baong0c trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 3
    Bài viết cuối: 30-09-2010, 11:10 PM
  3. Cho Mình Xin Tài Liệu Về regular expressions
    Gửi bởi thansautk trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 6
    Bài viết cuối: 05-12-2008, 10:11 AM
  4. Regular Expressions, help me!
    Gửi bởi Kevin Hoang trong diễn đàn Thắc mắc chung
    Trả lời: 7
    Bài viết cuối: 23-03-2008, 03:04 AM
  5. Regular expressions, giúp mình một chút về Regular expressions
    Gửi bởi coixuong trong diễn đàn Thắc mắc chung
    Trả lời: 1
    Bài viết cuối: 26-11-2007, 03:39 PM

Quyền hạn của bạn

  • Bạn không thể gửi đề tài mới
  • Bạn không thể gửi bài trả lời
  • Bạn không thể gửi các đính kèm
  • Bạn không thể chỉnh sửa bài viết của bạn