2015-06-19 67 views
1

我们正试图编写一个程序来存储项目的所有变量,参数,方法,类名等。然后我们用正确的名字替换方法。 基本上我使用Directory.GetFiles()StreamReader来读出.CS文件。比方说,下面是我们从读出那些.CS文件得到了结果:通过前缀和分段查找带有RegEx的字符串

string Code = @"public static void _MET_ClassName_MethodName() { var _VAR_MethodName_Foo = \"Test\"; }"; 

在现实中的字符串Code是很长的,并包含更多的方法和变量定义。最后,我将添加参数和类名称。

我想获得RegEx的方法和变量名称,虽然没有任何工作,我不知道如何实现我想要的。符号名称包含以下内容:_ABC_Segment1_Segment2。 ABC可以是任何3个字母的值,Segment1和Segment2将总是只包含字母数字字符(这些分段的长度是可变的),并且下划线总是在那里。

我试着阅读RegEx并使用regexr.com来“试用”,虽然我从来没有远到过。任何帮助表示赞赏。

下面我尝试:

/_MET_([A-Z]\w+)/g 

这不是变量由于具有在那里固定_MET_和它不会使在SEGMENT1和分段2的差。

+0

它是多么重要的变量,方法等*清单*准确*?它可能更适合使用代码分析器而不是过滤文本。 – hometoast

回答

2

下面将做:

_[A-Za-z]{3}_[A-Za-z0-9]*_[A-Za-z0-9]* 

击穿

_     //match first underscore 
[A-Za-z]{3}  //match 3 alpha characters 
_     //match separator underscore 
[A-Za-z0-9]*  //match any alpha-numeric string (segment1) 
_     //match another underscore 
[A-Za-z0-9]*  //match alphanumeric string (segment2) 

可替换地,因为它看起来像在第一部分(MET或VAR)可能是从可接受值的一小部分,如果您只想匹配该部分字符串中的几个值,则以下方法可行:

_(MET|VAR)_[A-Za-z0-9]*_[A-Za-z0-9]* 

(MET|VAR)部分匹配MET或VAR。

+0

感谢您的详细描述。像缺陷一样工作,我可以从中学习。 – Roel

相关问题