2011-11-02 1 views
0

J'ai une longue chaîne en C# et je dois trouver des sous-chaînes qui ressemblent à ceci:Trouver une chaîne dans une chaîne avec un motif spécial C#

number.number:number 

Par exemple cette chaîne:

text text 
965.435:001 text text sample 
7854.66:006 text text 

Je veux trouver et enregistrer 965.435: 001 et 7854.66: 006 à une chaîne en quelque sorte.

+2

Le regex dont vous avez besoin est '\ d + \ \ d +:. \ d + '. – Heinzi

+0

Merci, pourriez-vous fournir un exemple de code? – Afra

Répondre

7
  • \d signifie "chiffres"
  • + signifie "un ou plusieurs"
  • \. signifie un point littéral (. seul signifierait "tout caractère")
  • \b signifie "limite de mot" (start ou fin d'un "mot" alphanumérique).

Ainsi, votre regex serait

\b\d+\.\d+:\d+\b 

En C#:

MatchCollection allMatchResults = null; 
Regex regexObj = new Regex(@"\b\d+\.\d+:\d+\b"); 
allMatchResults = regexObj.Matches(subjectString); 
if (allMatchResults.Count > 0) { 
    // Access individual matches using allMatchResults.Item[] 
} else { 
    // Match attempt failed 
} 
+0

Wow, merci !! – Afra

0

utiliser une expression rationnelle et de capturer la chose ..

jeu avec ce code ... il devrait vous obtenir ce que vous voulez ...

string text = "your text"; 
     string pat = @"(\d*\.\d*:\d*)"; 

     // Instantiate the regular expression object. 
     Regex r = new Regex(pat, RegexOptions.IgnoreCase); 

     // Match the regular expression pattern against a text string. 
     Match m = r.Match(text); 
     int matchCount = 0; 
     while (m.Success) 
     { 
     Console.WriteLine("Match"+ (++matchCount)); 
     for (int i = 1; i <= 2; i++) 
     { 
      Group g = m.Groups[i]; 
      Console.WriteLine("Group"+i+"='" + g + "'"); 
      CaptureCollection cc = g.Captures; 
      for (int j = 0; j < cc.Count; j++) 
      { 
       Capture c = cc[j]; 
       System.Console.WriteLine("Capture"+j+"='" + c + "', Position="+c.Index); 
      } 
     } 
     m = m.NextMatch(); 
     } 
1

le dessous dans un exemple comment utiliser regex pour trouver certains formats dans une chaîne

class TestRegularExpressionValidation 
{ 
    static void Main() 
    { 
     string[] numbers = 
     { 
      "123-456-7890", 
      "444-234-22450", 
      "690-203-6578", 
      "146-893-232", 
      "146-839-2322", 
      "4007-295-1111", 
      "407-295-1111", 
      "407-2-5555", 
     }; 

     string sPattern = "^\\d{3}-\\d{3}-\\d{4}$"; 

     foreach (string s in numbers) 
     { 
      System.Console.Write("{0,14}", s); 

      if (System.Text.RegularExpressions.Regex.IsMatch(s, sPattern)) 
      { 
       System.Console.WriteLine(" - valid"); 
      } 
      else 
      { 
       System.Console.WriteLine(" - invalid"); 
      } 
     } 
    } 
} 
0

Quelque chose comme ceci:

var match = Regex.Match("\d+\.\d+:\d+") 
while (match.Success){ 
    numbersList.Add(match.Groups[0]) 
    match = match.NextMatch() 
} 
Questions connexes