2009-05-27 5 views
0

j'ai trois phrases comme suit:C# .net Expression régulière pour correspondre texte délimité par des espaces et du côlon

 
000000-00000 Date First text: something1 
200000-00000 Time Second text: something2 
234222-34332 struc Third text: somthing3 

Comment puis-je écrire une expression régulière pour correspondre entre (Date | Heure | struc) et le côlon (:), n'incluant pas (Date | Time | struc) ?.

+1

Je ne sais pas ce que vous voulez dire. Pourriez-vous fournir un échantillon de ce que vous voulez vraiment faire correspondre/ne pas correspondre? –

Répondre

0

L'expression suivante captera ce que vous voulez dans le groupe nommé value hors Date, Time, struc, l'espace suivant, et les deux points suivant la valeur.

(?:Date|Time|struc) (?<value>[^:]*) 

Cette expression inclura le colon.

(?:Date|Time|struc) (?<value>[^:]*:) 
3

Je suppose que c'est ce que vous recherchez. La partie regex est:

new Regex(@"^\d{6}-\d{5} \w* ([^:]*): ") 

Et voici un programme de test, mais complet:

using System; 
using System.Text.RegularExpressions; 

class Test 
{ 
    static void Main(string[] args) 
    { 
     Parse("000000-00000 Date First text: something1"); 
     Parse("200000-00000 Time Second text: something2"); 
     Parse("234222-34332 struc Third text: somthing3"); 
    } 

    static readonly Regex Pattern = new Regex 
     (@"^\d{6}-\d{5} \w* ([^:]*): "); 

    static void Parse(string text) 
    { 
     Console.WriteLine("Input: {0}", text); 
     Match match = Pattern.Match(text); 
     if (!match.Success) 
     { 
      Console.WriteLine("No match!"); 
     } 
     else 
     { 
      Console.WriteLine("Middle bit: {0}", match.Groups[1]); 
     } 
    } 
} 

Notez que cela ne suppose pas « Date », « Time » « struc » sont les seules valeurs possibles après les chiffres, juste qu'ils seront construits à partir de caractères de mot. Il suppose également que vous voulez faire correspondre à toute la ligne, pas seulement la partie du milieu. Il est facile d'extraire les autres sections avec d'autres groupes si cela vous serait utile.

+0

Admettez-le. Vous avez préparé cette réponse. :-) – Tomalak

+0

J'ai préparé toutes les réponses. Cela prend beaucoup de temps pour trouver le bon;) –

0

Ce:

^\d{6}-\d{5} \S+ ([^:]+) 

correspondrait à "premier texte", "Deuxième texte" et "Troisième texte", sans se référer explicitement à (Date|Time|struc). Le match dans le groupe 1.

0

Si vous êtes de exemple que vous attendez que la sortie soit:

premier texte Deuxième texte texte Troisième

Vous utilisez l'expression régulière

Je ne peux pas imaginer regarder votre exemple qui serait extrêmement utile si - il semble que le texte descriptif est après le côlon qui impliquerait que vous voulez vraiment tout à la fin de la ligne qui serait:

(?i:(?<=(DATE|TIME|STRUC)\s).*) 

[vérifié à l'aide RegexBuddy - donc si j'interprète correctement votre question, cela fonctionne]

Questions connexes