- การแทนที่ white-space ด้วยช่องว่าง 1 ช่อง
- การหา url จาก HREFs
- การเปลี่ยน Date Formats
- การหา protocol และ Port Number จาก URL
- นำ Invalid Characters ออกจาก String
- ตรวจสอบ email ว่า format ถูกต้องมั๊ย
- extract string ด้วย regex
- ตรวจสอบว่ามีเฉพาะตัวเลขเท่านั้น
1.การแทนที่ white-space ด้วยช่องว่าง 1 ช่อง
การแทนที่ white-space characters ทั้งหลาย \t
, \r
, \n
, SPACE (ASCII 32) ด้วยช่องว่าง 1 ช่อง
using System; using System.Text.RegularExpressions; namespace ConsoleApp { class Program { static void Main(string[] args) { string st = @"Content 1 Content 2 Content 3 Content 4 Content 5"; string st1 = Regex.Replace(st, @"\s+", " "); string st2 = Regex.Replace(st, @"\s+", ""); Console.WriteLine(st1); Console.WriteLine(st2); } } }
บรรทัดที่ 15,16 \s+
Match one or more white-space characters.
รันจะได้ st1
จะมีช่องว่างแต่ละอันกว้าง 1 ช่อง และ st2
ไม่มีช่องว่างเหลือ
Content 1 Content 2 Content 3 Content 4 Content 5 Content1Content2Content3Content4Content5
2.การหา url จาก HREFs
private static void DumpHRefs(string inputString) { Match m; string HRefPattern = "href\\s*=\\s*(?:[\"'](?<1>[^\"']*)[\"']|(?<1>\\S+))"; try { m = Regex.Match(inputString, HRefPattern, RegexOptions.IgnoreCase | RegexOptions.Compiled, TimeSpan.FromSeconds(1)); while (m.Success) { Console.WriteLine("Found href " + m.Groups[1] + " at " + m.Groups[1].Index); m = m.NextMatch(); } } catch (RegexMatchTimeoutException) { Console.WriteLine("The matching operation timed out."); } }
using System; using System.Reflection; using System.Text.RegularExpressions; namespace ConsoleApp { class Program { static void Main(string[] args) { string inputString = "My favorite web sites include:</P>" + "<A HREF=\"http://msdn2.microsoft.com\">" + "MSDN Home Page</A></P>" + "<A HREF=\"http://www.microsoft.com\">" + "Microsoft Corporation Home Page</A></P>" + "<A HREF=\"http://blogs.msdn.com/bclteam\">" + ".NET Base Class Library blog</A></P>"; DumpHRefs(inputString); } } }
Pattern | Description |
href | Match the literal string “href”. The match is case-insensitive. |
\s* | Match zero or more white-space characters. |
= | Match the equals sign. |
\s* | Match zero or more white-space characters. |
(?:\["'\](?<1>\[^"'\]*)["']|(?<1>\S+)) | Match one of the following without assigning the result to a captured group: – A quotation mark or apostrophe, followed by zero or more occurrences of any character other than a quotation mark or apostrophe, followed by a quotation mark or apostrophe. The group named 1 is included in this pattern.– One or more non-white-space characters. The group named 1 is included in this pattern. |
(?<1>[^"']*) | Assign zero or more occurrences of any character other than a quotation mark or apostrophe to the capturing group named 1 . |
(?<1>\S+) | Assign one or more non-white-space characters to the capturing group named 1 . |
รันจะได้
Found href http://msdn2.microsoft.com at 43 Found href http://www.microsoft.com at 102 Found href http://blogs.msdn.com/bclteam at 176
3.การเปลี่ยน Date Formats
static string MDYToDMY(string input) { try { return Regex.Replace(input, "\\b(?<month>\\d{1,2})/(?<day>\\d{1,2})/(?<year>\\d{2,4})\\b", "${day}-${month}-${year}", RegexOptions.None, TimeSpan.FromMilliseconds(150)); } catch (RegexMatchTimeoutException) { return input; } }
using System; using System.Globalization; using System.Reflection; using System.Text.RegularExpressions; namespace ConsoleApp { class Program { public static void Main() { string dateString = DateTime.Today.ToString("d", DateTimeFormatInfo.InvariantInfo); string resultString = MDYToDMY(dateString); Console.WriteLine("Converted {0} to {1}.", dateString, resultString); } } }
รันจะได้
Converted 06/13/2019 to 13-06-2019.
4.การหา protocol และ Port Number จาก URL
using System; using System.Text.RegularExpressions; namespace ConsoleApp { class Program { public static void Main() { string url = "http://www.contoso.com:8080/letters/readme.html"; Regex r = new Regex(@"^(?<proto>\w+)://[^/]+?(?<port>:\d+)?/", RegexOptions.None, TimeSpan.FromMilliseconds(150)); Match m = r.Match(url); if (m.Success) Console.WriteLine(r.Match(url).Result("${proto}${port}")); } } } // The example displays the following output: // http:8080
5.นำ Invalid Characters ออกจาก String
ตัวอย่างนี้จะ strips out all nonalphanumeric characters ด้วย empty string ยกเว้น periods (.), at symbols (@), and hyphens (-)
using System; using System.Text.RegularExpressions; public class Example { static string CleanInput(string strIn) { // Replace invalid characters with empty strings. try { return Regex.Replace(strIn, @"[^\w\.@-]", "", RegexOptions.None, TimeSpan.FromSeconds(1.5)); } // If we timeout when replacing invalid characters, // we should return Empty. catch (RegexMatchTimeoutException) { return String.Empty; } } }
ใช้กรองตัวอักษรที่มองไม่เห็นออก ให้เหลือตัวอักษรภาษาอังกฤษ ภาษาไทย และอักขระบางตัว (เพื่อใช้กับ sql query ได้)
[ก-๙] สำหรับภาษาไทยซึ่งมีทั้ง พยัญชนะ สระ ตัวเลขไทยมากมาย ให้เริ่มด้วย “ก” ถึง “๙” จะได้ครบทุกตัวพอดี
query = Regex.Replace(query, @"[^0-9A-Za-zก-๙ ()/.,\-:'_@]", "");
- 0-9 คือ ตัวเลข
- A-za-z คือ ตัวอักษรภาษาอังกฤษ
- ก-๙ คือ ตัวอักษรภาษาไทย
- ()/.,-‘ คือ ช่องว่าง, วงเล็บ, slash, period, comma, dash, quote, under score
- @
6.ตรวจสอบ email ว่า format ถูกต้องมั๊ย
private static string DomainMapper(Match match) { // Use IdnMapping class to convert Unicode domain names. var idn = new IdnMapping(); // Pull out and process domain name (throws ArgumentException on invalid) var domainName = idn.GetAscii(match.Groups[2].Value); return match.Groups[1].Value + domainName; }
public static bool IsValidEmail(string email) { if (string.IsNullOrWhiteSpace(email)) return false; try { // Normalize the domain email = Regex.Replace(email, @"(@)(.+)$", DomainMapper, RegexOptions.None, TimeSpan.FromMilliseconds(200)); // Examines the domain part of the email and normalizes it. } catch (RegexMatchTimeoutException e) { return false; } catch (ArgumentException e) { return false; } try { return Regex.IsMatch(email, @"^(?("")("".+?(?<!\\)""@)|(([0-9a-z]((\.(?!\.))|[-!#\$%&'\*\+/=\?\^`\{\}\|~\w])*)(?<=[0-9a-z])@))" + @"(?(\[)(\[(\d{1,3}\.){3}\d{1,3}\])|(([0-9a-z][-0-9a-z]*[0-9a-z]*\.)+[a-z0-9][\-a-z0-9]{0,22}[a-z0-9]))$", RegexOptions.IgnoreCase, TimeSpan.FromMilliseconds(250)); } catch (RegexMatchTimeoutException) { return false; } }
using System; using System.Globalization; using System.Text.RegularExpressions; namespace ConsoleApp { class Program { public static void Main() { string[] emailAddresses = { "david.jones@proseware.com", "d.j@server1.proseware.com", "jones@ms1.proseware.com", "j.@server1.proseware.com", "j@proseware.com9", "js#internal@proseware.com", "j_9@[129.126.118.1]", "j..s@proseware.com", "js*@proseware.com", "js@proseware..com", "js@proseware.com9", "j.s@server1.proseware.com", "\"j\\\"s\\\"\"@proseware.com", "js@contoso.中国" }; foreach (var emailAddress in emailAddresses) { if (IsValidEmail(emailAddress)) Console.WriteLine("Valid: {0}", emailAddress); else Console.WriteLine("Invalid: {0}", emailAddress); } Console.ReadKey(); } } } // The example displays the following output: // Valid: david.jones@proseware.com // Valid: d.j@server1.proseware.com // Valid: jones@ms1.proseware.com // Invalid: j.@server1.proseware.com // Valid: j@proseware.com9 // Valid: js#internal@proseware.com // Valid: j_9@[129.126.118.1] // Invalid: j..s@proseware.com // Invalid: js*@proseware.com // Invalid: js@proseware..com // Valid: js@proseware.com9 // Valid: j.s@server1.proseware.com // Valid: "j\"s\""@proseware.com // Valid: js@contoso.中国
Validate Email Addresses แบบ Salesforce
bool flag = Regex.IsMatch(email, @"^(?("")("".+?(?<!\\)""@)|(([0-9a-z]((\.(?!\.))|[-!#\$%&'\*\+/=\?\^`\{\}\|~\w])*)(?<=[0-9a-z])@))" + @"(?(\[)(\[(\d{1,3}\.){3}\d{1,3}\])|(([0-9a-z][-0-9a-z]*[0-9a-z]*\.)+[a-z0-9][\-a-z0-9]{0,22}[a-z0-9]))$", RegexOptions.IgnoreCase, TimeSpan.FromMilliseconds(250));
7.extract string ด้วย regex
หา imageWidth, imageHeight จากรูปแบบที่ตายตัวด้วย regex
using System; using System.Text.RegularExpressions; namespace ConsoleApp1 { class Program { static void Main(string[] args) { string text = "ImageDimension=600x400;ThumbnailDimension=60x40"; Regex pattern = new Regex(@"ImageDimension=(?<imageWidth>\d+)x(?<imageHeight>\d+);ThumbnailDimension=(?<thumbWidth>\d+)x(?<thumbHeight>\d+)"); Match match = pattern.Match(text); int imageWidth = int.Parse(match.Groups["imageWidth"].Value); int imageHeight = int.Parse(match.Groups["imageHeight"].Value); int thumbWidth = int.Parse(match.Groups["thumbWidth"].Value); int thumbHeight = int.Parse(match.Groups["thumbHeight"].Value); } } }
อีกตัวอย่าง ดึงตัวเลขตรงกลางออกมา
string text = "12345-129-888999"; Regex pattern = new Regex(@"\d+-(?<middle>\d+)-\d+"); Match match = pattern.Match(text); int middle = int.Parse(match.Groups["middle"].Value); // 129
แต่ถ้ารูปแบบของข้อมูลไม่แน่นอน แต่ prefix และ postfix แน่นอน ใช้ IndexOf()
และ Substring()
แทนได้
int st = 10; // length of prefix int end = text.IndexOf("postfix"); string dfpolicyno = text.Substring(st, end - st);
แกะ id ออกมาจาก log (200411.log) แล้วเขียน id ที่ได้ไว้อีกไฟล์ (200411.txt)
using System.Collections; using System.IO; using System.Text; namespace ConsoleApp1 { class Program { static void Main(string[] args) { string ipFilename = @"200411.log"; string line; ArrayList arr = new ArrayList(); using (StreamReader ipFile = new StreamReader(ipFilename, Encoding.Default, true)) { while ((line = ipFile.ReadLine()) != null) { arr.Add(line); //Console.WriteLine(line); } } string opFilename = @"200411.txt"; // ... [Main] id = '1', .... using (StreamWriter w = File.AppendText(opFilename)) { for (int i = 0; i < arr.Count; i++) { //w.WriteLine("[{0}] {1}", i, arr[i]); string text = arr[i].ToString(); if (text.Contains("[Main] id =")) { int st = text.IndexOf("id ="); string tmp1 = text.Substring(st + 4); int en = tmp1.IndexOf(","); string tmp2 = tmp1.Substring(0, en) + ","; w.Write("{0}", tmp2); //w.WriteLine("{0}", tmp2); } } } } } }
8.ตรวจสอบว่ามีเฉพาะตัวเลขเท่านั้น
- ^ ตัวเริ่มต้น
- * zero or more
- $ ตัวลงท้าย
Regex.IsMatch(idcardno, @"^[0-9]*$");