正则表达式以获得正确的字符串输出

时间:2017-02-08 05:23:16

标签: regex

我正在尝试使用正则表达式从下面的文本中获取RaisePropertyChanged(DominSelectors)

base.RaisePropertyChanged<IEnumerable<DominSearcherViewModel>>(Expression.Lambda<Func<IEnumerable<DominSearcherViewModel>>>(Expression.Property(Expression.Constant(this, typeof(TestViewModel)), (MethodInfo)MethodBase.GetMethodFromHandle(typeof(TestViewModel).GetMethod("get_DominSelectors").MethodHandle)), new ParameterExpression[0]));

我试过下面的正则表达式,但我得不到正确的结果: -

.*?(RaisePropertyChanged).*?\\(.*?\\(.*?\\(.*?\\(.*?\\(.*?\\(.*?\\(.*?\\(.*?(\\().*?(DominSelectors).*?\\).*?\\).*?\\).*?\\).*?(\\))(;)

错误的结果: - RaisePropertyChanged("get_DominSelectors");

正确的结果: - RaisePropertyChanged(DominSelectors);

编辑:get_DominSelectors不是修复词我可以以get_ABC,get_Xyz开头的任何单词。我只想要ABC和Xyz。

2 个答案:

答案 0 :(得分:2)

试试这个:

\w*(RaisePropertyChanged).*(?:get_)(\w+(?="\))).*;

捕获组1:RaisePropertyChanged

whatever_word_string之后和get_

之前捕获第2组:")

答案 1 :(得分:1)

查找

  B01002e2_max B01002e3_max B01002e2_mean B01002e3_mean B01002e2_min B01002e3_min
1         40.8         49.8         38.46      38.71667         35.5         23.9

替换:

.*(RaisePropertyChanged).*((?<=get_)\w+(?="\))).*;

演示:https://regex101.com/r/EgXlcD/14

正则表达式:

\1(\2); - 匹配任何字符的0或更多

.* - (?<=get_)

的正面观察

get_ - 正面展望(?="\))