如何忽略列表中的某个值?

问题描述 投票:0回答:1

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

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"
  }
}
terraform terraform-provider-aws terraform0.12+
1个回答
2
投票

当我们的目标是过滤一个列表时,通常从一个 for 表情 附带 if 子句。这让我们可以对每个元素做出决定,但却提出了用什么表达式来做决定的问题。

对于 "我们如何检测一个字符串是否有一个特定的前缀?"这个问题,我认为至少有几种不同的方法可以完成。我想至少有几种不同的方法来完成这个问题,但最简洁的可能是使用正则表达式,通过 regexall如果至少有一个匹配,则返回true。

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

我用了 regexall 而非 regex 在这里,因为 regex 定义为 报错 如果没有匹配 -- -- 它期望至少有一个匹配 -- -- 而 regexall 让我们自己处理零匹配的情况。

将其与 for 表达式将给我们带来以下结果。

[ 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 ]
© www.soinside.com 2019 - 2024. All rights reserved.