2010-11-24 4 views
1

J'ai un modèle dans un fichier comme suit:Expression régulière en C# .net

public "any word" "any word"(

exemple:

public object QuestionTextExists(QuestionBankProfileHandler QBPH) 

Maintenant, je veux que les "QuestionTextExists" et un certain nombre d'espace peut se produire à gauche et à droite de "l'objet" (pas exactement l'objet, ce peut être n'importe quel mot). Quelqu'un peut-il S'il vous plaît aidez-moi comment faire cela en utilisant une expression régulière.

Merci pour les réponses. Mais comment puis-je extraire uniquement le nom de la méthode de ce modèle?

+0

Essayez-vous par hasard d'analyser le code C# avec une regex car votre * pattern * est assez proche de C#? –

Répondre

0

En supposant que les identifiants 2e et 3e sont seulement des lettres, cela a mis les noms de méthode dans le premier groupe de capture:

^public\s+[A-Za-z]+\s+([A-Za-z]+) 
+0

De ce modèle je veux seulement le nom de la méthode. (Pas entièrement le modèle). Merci – Prem

+0

@prem: Je pense que c'est plus proche de ce que vous cherchez -^public \ s + \ w \ s + $ '\ w –

1

L'expression ^\s*public\s+\w+\s+(\w+)\(.*?\) fera l'affaire. Vous pouvez le modifier pour donner des noms plus significatifs. Je viens d'utiliser un groupe numéroté. Exemple d'utilisation:

using System; 
using System.Text.RegularExpressions; 

class Program 
{ 
    private static Regex regexObj = 
     new Regex(@"^\s*public\s+\w+\s+(\w+)\(.*?\)", RegexOptions.IgnoreCase | RegexOptions.Multiline); 

    static void Main(string[] args) 
    { 
     var testSubject = 
      "public object QuestionTextExists(QuestionBankProfileHandler QBPH)"; 

     var result = regexObj.Match(testSubject).Groups[1].Value; 

     Console.WriteLine(result); 
     Console.ReadKey(); 
    } 
} 
0

Vous pouvez utiliser suivant regex:

^public\s+?(?<id1>[a-zA-Z0-9]+?)\s+?(?<id2>[a-zA-Z0-9]+?)\s+?(

Ensuite, le groupe correspondant nommé ID2 vous donnera la chaîne désirée.

Pour accélérer l'exécution de l'expression régulière, créez l'objet de type Regex en tant que membre statique de votre classe, puis définissez son option Compilée.

0
^public\s+\w\s+$'\w 

Obtient le mot après le motif correspondant.

0

Si votre modèle est toujours public[space]word[space]target[bracket]stuffyoudon'tcareabout[bracket], il est facile de réaliser sans regex. Comme si:

string phrase = "public object QuestionTextExists(QuestionBankProfileHandler QBPH)"; 

string word = phrase.split('(')[0].split(' ')[2]; 

Y a-t-il une raison pour laquelle vous voulez utiliser regex?