我需要使用一个正则表达式来匹配将始终存在的ci-
,然后匹配可选的-l
,-s
,-r
,这样我就可以提取中间部分,但是如您所见,以下示例中的破折号将其他单词分隔开了,我不想删除这些单词。
ci-star-l
ci-pound-sign
ci-pound-sign-r
以上内容将变为:
star
pound-sign
pound-sign
这是我的尝试,但这是错误的:
(ci-).*(-.)
答案 0 :(得分:2)
我建议替换
的匹配项^ci-|-[lsr]$
,带有空字符串。请注意,正则表达式的替换方法/功能必须支持多次替换。
请参见regex demo。
详细信息
^ci-
-开始的ci-
|
-或-[lsr]$
--
和l
/ s
/ r
在字符串的末尾。如果您想使用最初的方法,可以考虑
^ci-(.*?)(?:-[lsr])?$
请参见this regex demo。在这里,(.*?)
抓取0个以上的字符,但尽可能少地进入组1,并且(?:-[lsr])?$
与可选的-l
,-r
,-s
匹配字符串。 *?
非贪婪量词和$
锚点对于此正则表达式的工作至关重要。必须使用对组1的后向引用(通常是$1
或\1
)进行替换。
答案 1 :(得分:2)
(...)
是一个匹配组,以后您可以从中获取上下文。
$
是字符串的结尾。
因此,我将使用ci-(.*?)(?:-\w)?$
,然后您的结果就是第一个匹配组。