代码之家  ›  专栏  ›  技术社区  ›  user6826691

如何忽略列表中的值?

  •  0
  • user6826691  · 技术社区  · 5 年前

    我有一个字符串列表,我想忽略该列表中的某些元素。例如我的列表

    variable domain_names = {
      type = list(string)
    }
    
    domain_names = ["foo.com","*.foo.com","*.foo2.com","bar.co.in"]
    
    output = [ "foo.com","bar.co.in"]
    

    我想忽略任何以*开头的内容,然后从中创建一个新列表。我怎样才能做到这一点?

    locals {
      distinct_domain_name = distinct(var.domain_names)
    }
    
    resource "aws_acm_certificate" "main" {
      count                     = length(local.distinct_domain_name)
      domain_name               = local.distinct_domain_name[count.index]
      subject_alternative_names = [slice(var.domain_names, 1, length(var.domain_names))]
      validation_method         = var.validation_method
      tags {
        Name      = local.distinct_domain_name[count.index]
        owner     = "xxx"
        terraform = "true"
      }
    }
    
    0 回复  |  直到 5 年前
        1
  •  2
  •   Martin Atkins    5 年前

    当我们的目标是筛选列表时,通常从 for expression 带着 if

    对于“我们如何检测字符串是否具有特定前缀”的问题我认为至少有几种不同的方法可以实现这一点,但最简洁的方法可能是使用正则表达式,via regexall ,如果至少有一个匹配项,则返回true:

    regexall("^\\*\\.", domain_name) > 0
    

    我用过 雷格索尔 而不是 regex 正则表达式 返回错误 雷格索尔 让我们自己来处理零匹配的案子。

    把它和

    [ for domain_name in var.domain_names : domain_name if regexall("^\\*\\.", domain_name) > 0 ]
    

    *.

    [ for domain_name in var.domain_names : domain_name if regexall("^\\*\\.", domain_name) == 0 ]
    
    推荐文章