正则表达式删除第一部分和可选的最后一部分

时间:2019-05-29 13:34:23

标签: regex

我需要使用一个正则表达式来匹配将始终存在的ci-,然后匹配可选的-l-s-r,这样我就可以提取中间部分,但是如您所见,以下示例中的破折号将其他单词分隔开了,我不想删除这些单词。

ci-star-l
ci-pound-sign
ci-pound-sign-r

以上内容将变为:

star
pound-sign
pound-sign

这是我的尝试,但这是错误的:

(ci-).*(-.)

2 个答案:

答案 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)?$,然后您的结果就是第一个匹配组。