正则表达式匹配字符串的可选部分中的强制符号?

时间:2017-07-13 08:09:22

标签: python regex

在字符串的可选部分中为强制符号匹配的正则表达式是什么。

例如,abcd将与RE匹配,但如果我添加:,则结果字符串将不会匹配,除非我之后添加字母abcd:efg

因此,可选部分是:向前,此可选部分中的强制符号是:本身。

abcd:efg:hijk也需要匹配。

更新: 我试过这个^([a-z]|_)*(:[a-z]|_)*$,但它没有按预期工作。

3 个答案:

答案 0 :(得分:1)

您应该包含更多示例和反例,但这应该足够接近您的目标:

^[a-z_]+(:[a-z_]+)*$

这是test

^([a-z]|_)*(:[a-z]|_)*$正则表达式的问题在于它只匹配每个:后的一个字母。 a:b:c:d matches but not a:b:c:de

最后,请注意(:[a-z]|_)是:

  • 冒号后跟一个字母
  • 或下划线。

它与冒号后跟下划线不匹配!

答案 1 :(得分:0)

我更喜欢正面看法的正则表达式。这也使得更容易对匹配的部分进行分组。它首先匹配第一个字符串,然后匹配所有后面的字符串,前面带有“:”

([a-z_]*)((?<=:):[a-z_])?

https://regex101.com/r/NkiZ3g/1

答案 2 :(得分:-1)

您的问题是,您需要知道如何表达长度超过单个字符的选项。试试这个:

^abcd(:efg)?$

abcdefg代替你真正想要的东西。