2010-11-24 156 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]; 

是否有你想使用正则表达式的原因?