python-3.x EC2示例ID的Regex

n3ipq98p  于 7个月前  发布在  Python
关注(0)|答案(2)|浏览(77)

我需要一个能够匹配AWS EC2示例ID的正则表达式。示例ID具有以下条件:

  • 可以是8或17个字符
  • 应该从我开始-
  • 后面要么是a-f要么是0-9

有效示例ID为:i-ed3a2f7ai-096e0bec99b504f82i-0cad9e810fbd12f4f
无效示例ID为e123g12i-1fz5645m
我能够创建以下正则表达式i-[a-f0-9](?:.{7}|.{16})$,但它也接受i-abcdeffhh不在a-f之间
如果有人能帮我,我会很感激

kx1ctssn

kx1ctssn1#

您可以创建一个正则表达式来匹配8个字符的ID值,并在其后添加可选的9个字符:

^i-[a-f0-9]{8}(?:[a-f0-9]{9})?$

字符串
这将匹配:

  • ^:行首
  • i-:字符i-
  • [a-f0-9]{8}:8位十六进制数字
  • (?:[a-f0-9]{9})?:可选的额外9位十六进制数字
  • $:行尾

Demo on regex101
注意,我们使用行尾和行尾锚来防止匹配ID值之前或之后的其他字符。这个正则表达式只匹配 * 8或17个字符的ID值,而不是12或11或5等。

tjvv9vkg

tjvv9vkg2#

您似乎可以只使用用途:

^i-(?:[a-f\d]{8}|[a-f\d]{17})$

字符串
查看在线demo

  • ^i--起始行锚,后跟“i-”;
  • (?:-打开非捕获组进行交替;
  • [a-f\d]{8}-匹配8次给定字符类中的任何字符;
  • |-或;
  • [a-f\d]{17}-匹配给定字符类中任意字符的17倍;
  • $-端线锚。

相关问题