在下划线之前匹配所有内容的正则表达式

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选项.

con*_*tor 5

你想要的是一个先行者.这样的事情应该有效:

new Regex(@"^.*(?=_(ally|self|enemy)$)")
Run Code Online (Sandbox Code Playgroud)

(?=... )意味着几乎你想要的:

零宽度正向前瞻.匹配前瞻中的图案可以匹配的位置.只匹配位置.它不消耗任何字符或扩展匹配.在像一个(?=两个)三个的模式中,两个和三个必须在一个匹配结束的位置匹配.

编辑:MSDN有更好的例子.