2010-11-24 155 views
1

我有一個文件的模式如下:正則表達式

public "any word" "any word"(

例如:

public object QuestionTextExists(QuestionBankProfileHandler QBPH) 

現在,我想只有「QuestionTextExists」與任意數量的空間可以出現在「對象」的左側和右側(不完全是對象,它可以是任何單詞)。 任何人都可以請幫助我如何使用正則表達式來做到這一點。

謝謝你的答案。但我怎麼能只提取該模式的方法名稱?

+0

你有沒有機會嘗試用正則表達式解析C#代碼作爲* pattern *看起來非常接近C#? – 2010-11-24 08:42:27

回答

0

假設第二和第三標識符是字母,這將使方法名第一個捕獲組:

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

從這個模式我只需要方法名稱(不完全是模式)。謝謝 – Prem 2010-11-24 08:50:45

1

表達式^\s*public\s+\w+\s+(\w+)\(.*?\)將做的伎倆。您可以修改它以提供更有意義的名稱。我只用了一個編號組。示例用法:

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

您可以使用下面的正則表達式:

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

然後匹配命名ID2組會給你所需的字符串。

爲了加速正則表達式的執行,創建Regex類型的對象作爲類的靜態成員,然後設置其編譯選項。

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

獲取匹配模式後的單詞。

0

如果你的圖案總是public[space]word[space]target[bracket]stuffyoudon'tcareabout[bracket]這很容易實現沒有正則表達式。像這樣:

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

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

是否有你想使用正則表達式的原因?