我正在尝试创建一个正则表达式,以便在我的html文件中查找不正确的资源使用情况。对于此特定测试,我想返回字符串匹配@@[a-zA-Z0-9\._\-]*
但不以i18n="
开头的字符串。这就是我到目前为止所拥有的
/(?!i18n=")@{2}[a-zA-Z0-9\._\-]+/gi
但是我似乎无法让这种否定工作。这些是我的测试字符串,但我的表达式在第一行找到了匹配,这不是我所期望的。
This one is correct and should not be returned i18n="@@DashboardResources.ProgramContentTitle"
Bad, should be returned @@DashboardResources.ProgramContentTitle
@@DashboardResources.ProgramContentTitle is Bad and should be returned.
Bad, should be returned @@DashboardResources.ProgramContentTitle"
Bad, should be returned i8@@DashboardResources.ProgramContentTitle
我正在使用regex101进行测试。任何指针都会非常感激。
如果重要,最终用途将在使用System.Text.RegularExpressions.Regex
类的c#应用程序中。
答案 0 :(得分:1)
首先,如果要测试.NET正则表达式,请在RegexStorm.net或RegexHero.net执行此操作,因为regex101不支持.NET正则表达式语法。当然,regex101很棒,因为它会自动解释模式,但Ultrapico Expresso工具也会为你做同样的事情。
接下来,(?!i18n=")
构造看起来是提前,它匹配的位置不会紧跟i18n="
子串。你需要的是背后的,(?<!i18n=")
,它将匹配之前 的位置与i18n="
子字符串。
var matches = Regex.Matches(s, @"(?<!i18n="")@@[a-zA-Z0-9._-]+")
.Cast<Match>()
.Select(m => m.Value)
.ToList();
如果您分享有关文档外观和要求的更多详细信息,则可能会有一个不同的,更好的解决方案。要获得更加可靠的HTML分析方法,您可以使用HtmlAgilityPack和类似的库。