2009-10-28 4 views
0

Je veux capturer le mot "affectation" seulement quand il se trouve au début de la ligne et que la ligne se termine après ce mot.Il peut y avoir zéro ou plusieurs caractères espace après le mot "affectation" et des caractères comme: ou # ou - .Comment faire correspondre une chaîne contenant beaucoup de r n f en utilisant des expressions régulières?

Par exemple lignes suivantes doivent correspondre

Assignments 

ou

Assignments : 

ou

assignments     

Où que, chaîne suivante ne doit pas correspondre

The details of various assignments that I have ... 

Je reçois la ligne suivante d'un fichier qui contient deux occurrences de mot "affectation".

Ab Initio\r\r\a\r\a\v\r\r\fAssignments\rThe details of the various assignments that I 

j'ai écrit après l'expression régulière, mais il n'est pas en mesure de saisir quoi que ce soit:

^Assignments(\s|:|-|#)*?$ 

Quand j'écris regex comme ci-dessous, les deux occurences de "cession" get sélectionné:

Assignments(\s|:|-|#)*?($)? 

Des suppositions? Que devrais-je faire? J'utilise C# pour cela.

Mon code C# est la suivante:

RegEx x = new Regex(@"^Assignments(\s|:|-|#)*?$", RegexOptions.IgnoreCase | RegexOptions.Multiline); 

output = x.Replace(inputText, "@@@@@@@@@@@@@@@@\r\n<project_details>$&"); 
      if (x.IsMatch(inputText)) 
      { 
       Match m = x.Match(inputText); 

       Console.WriteLine("\n\n\t~~~~~~~~~~ match found ~~~~~~~~~~~"); 
       Console.WriteLine(m.Index +" : " + m.Value); 
       Console.WriteLine("\n\n\n\n" + output);     
      } 
      else 
      { 
       Console.WriteLine("$$$$$$$$$$$$$ no match %%%%%%%%%%%%%%"); 
      } 

Je viens de re vérifié ma chaîne d'entrée. lignes originales dans le fichier est la suivante:

Assignments 
The details of various assignmenths that I ... 

Mais quand je charge filestream dans une variable de chaîne, je reçois même ligne comme celui-ci:

\r\r\a\r\a\v\r\r\fAssignments\rThe details of the various assignments that I 

Tout le monde sait ce qui se passe? Comment devrais-je formuler mon expression régulière? S'il vous plaît aider !!!!

+0

Vous avez répondu à l'une des réponses en disant: «Je dois utiliser regex pour mon projet."[Sic] Est-ce un devoir –

Répondre

1

Utilisez RegexOptions.Multiline avec votre regex, cela changera la signification de^et $ pour correspondre respectivement au début et à la fin de la ligne (au lieu de correspondre au début/à la fin de la chaîne entière).

+0

@Reko_t, Les Merci pour la réponse Je alredy RegExOption changé comme vous l'avez dit:?. Mon objet RegEx est la suivante: RegEx x = new Regex (@"^missions (\ s |: | - | #) *? $ ", RegexOptions.IgnoreCase | RegexOptions.Multiline); Même alors, je ne suis pas en mesure d'obtenir le résultat souhaité Y a-t-il quelque chose qui ne va pas dans ma routine? expression? – Shekhar

1

La première solution fonctionne si vous utilisez insensible à la casse et multiligne:

Regex RegexObj = new Regex("^Assignments(\\s|:|-|#)*?$", 
     RegexOptions.IgnoreCase | RegexOptions.Multiline); 
+0

salut Andrea, Je ai mis les deux options, mais je ne reçois pas le résultat souhaité – Shekhar

1

Je vais aller de l'avant et supposons que vous avez vraiment pas besoin de ce caractère de saut (\ f) là-bas et sinon cela fonctionnera:

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 

namespace ScratchConsole 
{ 
    class Program 
    { 
     private static string[] punctuationChars = new string[] 
     { 
      ":", 
      ";" 
     }; 
     static void Main(string[] args) 
     { 
      string foo = "Ab Initio\r\r\a\r\a\v\r\rAssignments\rThe details of the various assignments that I"; 
      string[] split = foo.Split(new string[] { "\r" },StringSplitOptions.None); 
      foreach (string s in split) 
      { 
       if (s.StartsWith("Assignments")) 
       { 
        string temp = s.Remove(0, "Assignments".Length); 
        foreach (string c in punctuationChars) 
        { 
         temp = temp.Replace(c, ""); 
        } 
        if (string.IsNullOrEmpty(temp.Trim())) 
        { 
         Console.WriteLine("it worked!"); 
        } 
       } 
      } 
      Console.Read(); 
     } 
    } 
} 

si je me souviens, il y a une citation qui va quelque chose comme « Parfois, quelqu'un a un problème, et ils décident d'utiliser regexes maintenant, ils ont deux problèmes. ». (Pas la citation réelle, mais assez bon :))

+0

Merci RCIX pour la réponse Oui, je n'ai pas besoin de caractère de sortie (\ f), mais je dois utiliser l'expression régulière parce que le problème que je suis en train de résoudre n'est pas seulement lié à cette regex, je suis confronté au même problème avec d'autres expressions régulières. Je dois utiliser regex pour mon projet. – Shekhar

+0

Oh. Je suis désolé alors, le plus que je peux faire est de vous offrir un lien pour aider avec regexes, peut-être que cela aiderait. http://www.regular-expressions.info/ ou http://www.txt2re.com/ – RCIX

Questions connexes