1

(VS2012 C#) 我有一个没有区域和结构的大 .cs 文件。使用“查找和替换”工具,我想找出所有事件处理程序,例如:button_Click、window_Loaded 等。因此它的格式为:text1_text2,其中 text1 和 text2 必须存在(最小长度为 1)并用下划线 _ 分隔。正则表达式如何?

先感谢您。

Mag PS:到目前为止,我从未使用过“强大”的正则表达式,因为我不需要它,但现在是我使用它的时候了。当然,在这里问之前我已经尝试阅读了vs2012的在线帮助并尝试了很多次,但都失败了。

4

4 回答 4

2

试试这个正则表达式:

([a-z_]\w*)_([a-z\d]+)

火柴:

Some_Button1_Click

Button1_Click

Some_strange_Button1_Click

示例代码:

const string strRegex = @"([a-z_]\w*)_([a-z\d]+)";
const RegexOptions myRegexOptions = RegexOptions.IgnoreCase | RegexOptions.Multiline | RegexOptions.CultureInvariant;
Regex myRegex = new Regex(strRegex, myRegexOptions);
string text = @"Some_Button1_Click";

var matches = myRegex.Matches(text)
              .Cast<Match>()
              .Select(x => new {
                      AllText = x.Groups[0],  // all text      ==> "Some_Button1_Click"
                      Object = x.Groups[1],   // ([a-z_]\w*)   ==> "Some_Button1"
                      Event = x.Groups[2]     // ([a-z\d]+)    ==> "Click"
                  })
              .ToList();
于 2013-09-27T09:24:36.763 回答
1

你的意思是

[a-zA-Z0-9]+_[a-zA-Z]+

但是如果生成了事件处理程序,object sender您也可以搜索。EventArgs e

于 2013-09-27T09:07:25.263 回答
1
Sub {[A-Za-z0-9]+}\_{[A-Za-z0-9]+}

请记住,如果您在 Visual Studio 中使用正则表达式并且还需要 Replace 函数,您将需要这些花括号。然后,替换文本中的术语\1,\2将指代由查找文本中的花括号标识的相应捕获组。

于 2013-09-27T09:15:23.623 回答
0
(?i)[a-z0-9]+\_[a-z]+

这应该有效,它会找到一个字母 1 次或更多次,[a-z]+然后是下划线\_,然后再次相同[a-z]+(?i)使其不区分大小写,因此无论是否大写字母都会被发现。

于 2013-09-27T09:07:37.193 回答