正则表达式高级捕获
Regex Advanced Capture
我正在尝试从字符串中检索武器类名。
字符串可能如下所示:
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 未捕获。
更新 - 起床到最后_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)
)
我正在尝试从字符串中检索武器类名。
字符串可能如下所示:
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 未捕获。
更新 - 起床到最后_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)
)