Csharp/CSharp Tutorial/Regular Expression/Regular Expression

Материал из .Net Framework эксперт
Перейти к: навигация, поиск

Do a replace using the Regex

<source lang="csharp">using System; using System.Text.RegularExpressions; public class MainClass {

   static void Main( string[] args ) {
       // Create regex to search for IP address pattern.
       string pattern = @"([01]?\d\d?|2[0-4]\d|25[0-5])\." +
                        @"([01]?\d\d?|2[0-4]\d|25[0-5])\." +
                        @"([01]?\d\d?|2[0-4]\d|25[0-5])\." +
                        @"([01]?\d\d?|2[0-4]\d|25[0-5])";
       Regex regex = new Regex( pattern );
       Console.WriteLine( "Input given --> {0}",
                          regex.Replace("192.168.199.1",
                                        "xxx.xxx.xxx.xxx") );
   }

}</source>

Input given --> xxx.xxx.xxx.xxx

new Regex(<([^>]+)>[^<]*</(\1)>: for XML tag

<source lang="csharp">using System; using System.Collections.Generic; using System.Globalization; using System.Text; using System.Text.RegularExpressions; using System.Reflection; public class MainClass{

  public static void Main(){
       Regex r1 = new Regex(@"<([^>]+)>[^<]*</(\1)>");
       string s0 = "<M>S</M>";
       string s1 = "<M>S</I>";
       
       Console.WriteLine(r1.IsMatch(s0));
       Console.WriteLine(r1.IsMatch(s1));
  }

}</source>

True
False

new Regex((abc)*abc((abcd)|z)bc)

<source lang="csharp">using System; using System.Collections.Generic; using System.Globalization; using System.Text; using System.Text.RegularExpressions; using System.Reflection; public class MainClass{

  public static void Main(){
       Regex r = new Regex("(abc)*abc((abcd)|z)bc");
       Console.WriteLine(r.IsMatch("abcabcabcdbc"));
  }

}</source>

True

new Regex((abc)*)x(\1)

<source lang="csharp">using System; using System.Collections.Generic; using System.Globalization; using System.Text; using System.Text.RegularExpressions; using System.Reflection; public class MainClass{

  public static void Main(){
       Regex r1 = new Regex(@"((abc)*)x(\1)");
       string s1 = "abcabcabcxabc";
       Console.WriteLine(r1.IsMatch(s1) + "..." + r1.Match(s1).Value);
  }

}</source>

True...abcxabc

new Regex("(abc)|(xyz)*") 1

<source lang="csharp">using System; using System.Collections.Generic; using System.Globalization; using System.Text; using System.Text.RegularExpressions; using System.Reflection; public class MainClass{

  public static void Main(){
       Regex r1 = new Regex("(abc)|(xyz)*");
       Console.WriteLine(r1.IsMatch("abcxyzabcxyzxyzabcabcabc"));
  }

}</source>

True

new Regex("((abc)|(xyz))*") 2

<source lang="csharp">using System; using System.Collections.Generic; using System.Globalization; using System.Text; using System.Text.RegularExpressions; using System.Reflection; public class MainClass{

  public static void Main(){
       Regex r2 = new Regex("((abc)|(xyz))*");
       Console.WriteLine(r2.Match("abcxyzabcxyzxyzabcabcabc").Value);
  }

}</source>

abcxyzabcxyzxyzabcabcabc

new Regex("((?:abc)|(?:xyz))*") 3

<source lang="csharp">using System; using System.Collections.Generic; using System.Globalization; using System.Text; using System.Text.RegularExpressions; using System.Reflection; public class MainClass{

  public static void Main(){
       Regex r3 = new Regex("((?:abc)|(?:xyz))*");
       Console.WriteLine(r3.IsMatch("abcabcxyzabc"));
  }

}</source>

True

new Regex("^\\d+") 1

<source lang="csharp">using System; using System.Collections.Generic; using System.Globalization; using System.Text; using System.Text.RegularExpressions; using System.Reflection; public class MainClass{

  public static void Main(){
       Regex r = new Regex("^\\d+");
       
       
       string[] ss = new string[] { "123abc", "abc123", "123", "abc", "a123bc" };
       foreach (string s in ss)
          Console.WriteLine(r.IsMatch(s));
  }

}</source>

True
False
True
False
False

new Regex("\d+$") 2

<source lang="csharp">using System; using System.Collections.Generic; using System.Globalization; using System.Text; using System.Text.RegularExpressions; using System.Reflection; public class MainClass{

  public static void Main(){
       Regex r = new Regex(@"\d+$");
       
       
       string[] ss = new string[] { "123abc", "abc123", "123", "abc", "a123bc" };
       foreach (string s in ss)
          Console.WriteLine(r.IsMatch(s));
  }

}</source>

new Regex("^\\d+$") 3

<source lang="csharp">using System; using System.Collections.Generic; using System.Globalization; using System.Text; using System.Text.RegularExpressions; using System.Reflection; public class MainClass{

  public static void Main(){
       Regex r = new Regex("^\\d+$");
       
       
       string[] ss = new string[] { "123abc", "abc123", "123", "abc", "a123bc" };
       foreach (string s in ss)
          Console.WriteLine(r.IsMatch(s));
  }

}</source>

new Regex(?(^\d)^\d+$|^\D+$)

<source lang="csharp">using System; using System.Collections.Generic; using System.Globalization; using System.Text; using System.Text.RegularExpressions; using System.Reflection; public class MainClass{

  public static void Main(){
       Regex r = new Regex(@"(?(^\d)^\d+$|^\D+$)");
       Console.WriteLine(r.Match("cat too"));
       Console.WriteLine(r.Match("dag"));
       Console.WriteLine(r.Match("2else"));
  }

}</source>

cat too
dag

new Regex(^\d+$\n+, RegexOptions.Multiline)

<source lang="csharp">using System; using System.Collections.Generic; using System.Globalization; using System.Text; using System.Text.RegularExpressions; using System.Reflection; public class MainClass{

  public static void Main(){
       Regex r = new Regex(@"(^\d+$\n)+", RegexOptions.Multiline);
       Console.WriteLine(r.Match("987987\n129821").Value);
  }

}</source>

987987

new Regex(<[^>]+>[^<]*</[^>]+>): for XML tag

<source lang="csharp">using System; using System.Collections.Generic; using System.Globalization; using System.Text; using System.Text.RegularExpressions; using System.Reflection; public class MainClass{

  public static void Main(){
       Regex r0 = new Regex(@"<[^>]+>[^<]*</[^>]+>");
       
       string s0 = "<M>S</M>";
       string s1 = "<M>S</I>";
       Console.WriteLine(r0.IsMatch(s0));
       Console.WriteLine(r0.IsMatch(s1));
  }

}</source>

True
True

Regular Expresion Part

<source lang="csharp">using System; using System.Text; using System.Text.RegularExpressions; public class MainClass {

   static void Main( string[] args ) {
       // Create regex to search for IP address pattern.
       string pattern = @"(?<part1>[01]?\d\d?|2[0-4]\d|25[0-5])\." +
                        @"(?<part2>[01]?\d\d?|2[0-4]\d|25[0-5])\." +
                        @"(?<part3>[01]?\d\d?|2[0-4]\d|25[0-5])\." +
                        @"(?<part4>[01]?\d\d?|2[0-4]\d|25[0-5])";
       Regex regex = new Regex( pattern );
       Match match = regex.Match( "192.1.1.122" );
       MatchEvaluator eval = new MatchEvaluator(IPReverse );
       Console.WriteLine( regex.Replace("192.1.1.122", eval) );
   }
   static string IPReverse( Match match ) {
       StringBuilder sb = new StringBuilder();
       sb.Append( match.Groups["part4"] + "." );
       sb.Append( match.Groups["part3"] + "." );
       sb.Append( match.Groups["part2"] + "." );
       sb.Append( match.Groups["part1"] );
       return sb.ToString();
   }

}</source>

122.1.1.192

Reverse

<source lang="csharp">using System; using System.Text; using System.Text.RegularExpressions; public class MainClass {

   static void Main( string[] args ) {
       // Create regex to search for IP address pattern.
       string pattern = @"(?<part1>[01]?\d\d?|2[0-4]\d|25[0-5])\." +
                        @"(?<part2>[01]?\d\d?|2[0-4]\d|25[0-5])\." +
                        @"(?<part3>[01]?\d\d?|2[0-4]\d|25[0-5])\." +
                        @"(?<part4>[01]?\d\d?|2[0-4]\d|25[0-5])";
       Regex regex = new Regex( pattern );
       Match match = regex.Match( "192.168.123.1" );
       string replace = @"${part4}.${part3}.${part2}.${part1}" +
                        @" (the reverse of $&)";
       Console.WriteLine( regex.Replace("192.168.123.1", replace) );
   }

}</source>

1.123.168.192 (the reverse of 192.168.123.1)

Use Regular Expressions to split string

<source lang="csharp">using System; using System.Text.RegularExpressions; class MainClass {

   public static void Main()
   {
       string s = "A, B,cCCC, D";
       Regex regex = new Regex(@" |, ");
       foreach (string sub in regex.Split(s))
       {
           Console.WriteLine("Word: {0}", sub);
       }
   }

}</source>

Word: A
Word: B,cCCC
Word: D

Using RegEx

<source lang="csharp">using System; using System.Text; using System.Text.RegularExpressions;

   public class Tester
   {
       static void Main()
       {
           string s1 = "One,Two,Three, Inc.";
           Regex theRegex = new Regex(" |, |,");
           StringBuilder sBuilder = new StringBuilder();
           int id = 1;
           foreach (string subString in theRegex.Split(s1))
           {
               sBuilder.AppendFormat("{0}: {1}\n", id++, subString);
           }
           Console.WriteLine("{0}", sBuilder);
       }
   }</source>