Mig*_*ell 1 .net c# regex c#-4.0
我有很多关于RegEx的知识,但我对这个问题感到困惑.我需要匹配的一切正则表达式之前的最后底线,但只有当下划线后的文字是"自我","盟友"或"敌人".
所以,如果我有这样的输入字符串:
"hero_anti_infantry_melee_2_self"
"anti_infantry_ranged_2_ally"
"suppression_aoe_enemy"
"reinforce_btn_down"
"inset_energy"
"suppressed"
Run Code Online (Sandbox Code Playgroud)
我希望他们输出为:
"hero_anti_infantry_melee_2"
"anti_infantry_ranged_2"
"suppression_aoe"
//No Match (not match because it isn't enemy, ally, or self after the underscore)
//No Match
//No Match (not underscores or enemy/ally/self
Run Code Online (Sandbox Code Playgroud)
这是使用C#RegEx引擎,它可以使用任何必要的RegEx选项.
你想要的是一个先行者.这样的事情应该有效:
new Regex(@"^.*(?=_(ally|self|enemy)$)")
Run Code Online (Sandbox Code Playgroud)
该(?=... )意味着几乎你想要的:
零宽度正向前瞻.匹配前瞻中的图案可以匹配的位置.只匹配位置.它不消耗任何字符或扩展匹配.在像一个(?=两个)三个的模式中,两个和三个必须在一个匹配结束的位置匹配.
编辑:MSDN有更好的例子.