从字符串末尾匹配多个实例
Matching multiple instances from end of the string
我试图构建一个regex语句,但显然理解错误。我有一个C#StackTrace
,我想基本上裁剪字符串的末尾,直到我看到我们命名空间的第一个实例。这里有一段数据要说明——用一条手动定位的新行来说明我试图匹配的地方
at MooD.LandscapeExplorer.Controllers.LandscapeController.GetContextInstanceCount(BusinessContext context) in C:'Source'MooDEdge'Code'MooD16'MooD.LandscapeExplorer'Controllers'LandscapeController.cs:line 143
at System.Linq.Enumerable.<SelectManyIterator>d__1`2.MoveNext()
at System.Linq.Enumerable.WhereSelectEnumerableIterator`2.MoveNext()
at System.Collections.Generic.List`1..ctor(IEnumerable`1 collection)
at System.Linq.Enumerable.ToList[TSource](IEnumerable`1 source)
at MooD.LandscapeExplorer.Controllers.LandscapeController.ProcessContext(String[] types, String[] instances, QueryFilter[] filters) in C:'Source'MooDEdge'Code'MooD16'MooD.LandscapeExplorer'Controllers'LandscapeController.cs:line 125
at lambda_method(Closure , ControllerBase , Object[] )
at System.Web.Mvc.ActionMethodDispatcher.Execute(ControllerBase controller, Object[] parameters)
at System.Web.Mvc.ReflectedActionDescriptor.Execute(ControllerContext controllerContext, IDictionary`2 parameters)
at System.Web.Mvc.ControllerActionInvoker.InvokeActionMethod(ControllerContext controllerContext, ActionDescriptor actionDescriptor, IDictionary`2 parameters)
at System.Web.Mvc.Async.AsyncControllerActionInvoker.ActionInvocation.InvokeSynchronousActionMethod()
所以我想保留上半场,把下半场从绳子上去掉。我使用了负面前瞻(我从另一个问题中抓住了这个问题,我真的不明白它是如何工作的),来匹配除MooD
之外的任何内容。然后,我一直停留在字符串$
的末尾。
(at (?!MooD).*)$
在这一点上,我认为我所需要做的就是添加一个*
来匹配前一组的许多内容,将regex变成:
(at (?!MooD).*)*$
然而,当在https://regex101.com/.它仍然只是匹配最后一个实例。我还尝试添加了一个新的线路检测,但它仍然只匹配最后一条线路:
(at (?!MooD).*'n?)*$
有人能解释一下我如何匹配其余的吗?为什么这个解决方案不起作用?
要匹配底部,您可以使用基于负前瞻的regex:
at (?:(?!MooD)['s'S])*$
CCD_ 8将匹配任何字符中的0个或多个,同时断言没有字符在下一位置具有CCD_ 9。
['s'S]
将匹配包括换行符在内的任何字符。
PS:使用单词边界:更安全
at (?:(?!'bMooD'b)['s'S])*$
RegEx演示
我知道你正试图用正则表达式来实现这一点,但这里有一个非正则表达式选项:
public static string GetMooDStackTrace(string stackTrace)
{
var lines = stackTrace.Split(''n');
int lastLineWithMood = -1;
for (int i = 0; i < lines.Length; i++)
{
if (lines[i].Contains("MooD"))
lastLineWithMood = i;
}
return string.Join("'n", lines, 0, lastLineWithMood + 1);
}
根据您的输入,生成:
位于C:''Source''MooDEdge''Code''MooD16''MooD.LandscapeExplorer''Controllers''LandscapeController.cs:line 143中的MooD.LandiseExplorer.Controller.GetContextInstanceCount(BusinessContext上下文)位于System.Linq.Enumerable.d_1`2.MoveNext()位于System.Linq.Enumerable.WhereSelectEnumerableIterator`2.MoveNext()位于System.Collections.Generic.List`1.ctor(IEnumerable`1集合)位于System.Linq.Enumerable.ToList[TSource](IEnumerable`1源)在MooD.LandscapeExplorer.Controller.LandscapeController.ProcessContext(String[]类型、String[]实例、QueryFilter[]筛选器)中的C:''Source''MooDEdge''Code''MooD16''MooD.LandscapeExplorer ''Controllers''LandscapeController.cs:line 125
相关文章:
- 删除数组Javascript中字符串的所有实例
- 如何通过JS在不干扰其标记的情况下更改HTML文档中字符串的所有实例
- 是否有将基于字符串的JSON转换为Mongoose Schema对象实例的本地功能
- JavaScript:计算字符串中特定整数的实例
- 从 Node.js 模块中的缓冲区实例中逐行读取字符串
- 正则表达式来更改字符串中的所有实例
- javascript正则表达式,将多个实例替换为多行字符串中的单个实例
- 如何更改字符串/符号的所有实例的样式
- 替换字符串中YouTube/Vimeo iframe的所有实例
- 字符串是对象 String() 的实例吗?
- 我们如何在 javascript 对象中使用字符串名称存储创建 Backbone 视图的实例
- 如何匹配并返回一个字符串的多个实例,其中单个撇号可以包含在任何索引中
- Jquery:在一个字符串中查找所有实例模式,提示用户替换模式的所有实例,然后进行替换
- Ember.js:使用模型实例的路由获取模型实例的 url 字符串
- 如何在 JavaScript 中替换字符串中“+”的多个实例
- 查找字符串中单词所有实例的位置,在控制台中得到不需要的重复
- 正则表达式 Express 将反斜杠 的每个实例替换为字符串中的 u
- 按第三个实例拆分字符串
- 使用其他javascript删除字符串中某个字符的所有实例
- 删除多余的;#字符串中的实例