我正在尝试从字符串中检索武器类名。
字符串可能如下所示:
econ/default_generated/weapon_m4a1_silencer_am_m4a1-s_alloy_orange_medium
我想要:
weapon_m4a1_silencer
但这里的诀窍是,有时类名可能有2个或3个实例" _"
所以第二个例子是:
econ/default_generated/weapon_deagle_am_scales_bravo_medium
并且会给我:
weapon_deagle
可以使用的模式是它们总是2个字母,它们位于_类的名字后面(在这种情况下" am ")
非常感谢任何帮助。
编辑似乎存在比我想象的更多_实例的情况。 示例:未捕获https://regex101.com/r/Cmup26/1 weapon_knife_m9_bayonet。
答案 0 :(得分:1)
已更新 - 直到最后_AA _
weapon(?:(?:_[^\W_]+)+(?=_[^\W_]{2}_)|(?:(?!_[^\W_]{2}_)_[^\W_]+)+)
https://regex101.com/r/r6yORE/1
其中[^\W_]
是[a-zA-Z0-9]
(替换允许的字母)
扩展
weapon
(?: # Cluster - requires a _Segment
(?: _ [^\W_]+ )+
(?= _ [^\W_]{2} _ ) # Stop before last _AA_ (high priority)
| # or,
(?: # Stop before first _AA_ (low priority)
(?! _ [^\W_]{2} _ ) # (note- this is only place where
_ [^\W_]+ # segments with NO trailing _AA_
)+ # will match)
)