获取匹配字符串的子字符串与RexEx
问题描述:
我想过滤大文本文件中的某些字符串。我想要得到以某个单词开始并以引号结尾的字符串,但只是从该单词中最后一个点开始的该字符串的最后部分。更确切地说,我在文档中搜索类名,从基本名称空间开始,但我不需要完全限定的类名,只需要类名本身。 (例如,不"NamespaceA.NamespaceB.NamespaceC.Classname"
,只有"Classname"
获取匹配字符串的子字符串与RexEx
举个例子,从这个字符串:
sddkjasd"fhadslkfhdskljfahskjff"shkdfjhfkhafklj"NamespaceA.NamespaceB.NamespaceC.ClassnameA"swenbfjiwguzl"lgvfdu"eQVFZEIW"NamespaceA.NamespaceB.NamespaceC.ClassnameB"VDTZEvwqdtzevdzgi
我想这些比赛:
ClassnameA
ClassnameB
NamespaceA
永远是一样的,所以我可以使用这是一个起始条件,并且关闭标记将始终存在,所以我可以将它们用作最终条件,但是我不知道如何只选择最后一个从最后一个点开始的工作。正则表达式。当然,我可以工作绕过它,例如对结果使用字符串操作(这正是我现在正在做的),或者对结果使用第二个正则表达式,但是如果有直接使用正则表达式获得此结果的方法,我很感兴趣。目前,我与NamespaceA.+?(?=\")
匹配以获取完整的名称空间而不包含结束语。分数。
答
使用否定的字符类,使正则表达式引擎匹配任何字符,但不是"
或点,使得它赢得了不要贪婪地匹配点或引号。
"NamespaceA.*?\.([^."]*)"
OR
"NamespaceA[^"]*?\.([^."]*)"
使用上述正则表达式中的任何一个,并从组索引1
代码的类名:
String input = @"sddkjasd""fhadslkfhdskljfahskjff""shkdfjhfkhafklj""NamespaceA.NamespaceB.NamespaceC.ClassnameA""swenbfjiwguzl""lgvfdu""eQVFZEIW""NamespaceA.NamespaceB.NamespaceC.ClassnameB""VDTZEvwqdtzevdzgi";
Regex rgx = new Regex(@"NamespaceA[^""]*?\.([^.""]*)""");
foreach (Match m in rgx.Matches(input))
Console.WriteLine(m.Groups[1].Value);
答
如何:
NamespaceA(?:\.\w+)*\.(\w+)
的类名将会在第1组