首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >当字符串名称与列表中的任何元素部分匹配时,排除该字符串名称

当字符串名称与列表中的任何元素部分匹配时,排除该字符串名称
EN

Stack Overflow用户
提问于 2021-09-22 05:09:07
回答 2查看 42关注 0票数 1

我使用Python3读取AWS存储桶名称,如果存储桶名称与bucket_exclusion_list数组中定义的任何名称部分匹配,则明确地退出循环。

我创建了一个存储桶验证函数,如下所示:

代码语言:javascript
复制
def valid_bucket(bucket_name):
    bucket_exclusion_list = ['do-not-delete', 'aws-config', 'elasticbeanstalk']
    for exclusion_items in bucket_exclusion_list:
        if bool(re.match(exclusion_items, bucket_name)) == True:
            return False
        else:
            continue
    return True

在我的主函数中,我调用了valid_bucket函数,并基于布尔值,在代码中继续执行。

代码语言:javascript
复制
if valid_bucket(bucket_name):
   bucket_info["bucketName"] = bucket_name
   bucket_info["bucketSize"] = ''
   ...

代码似乎没有像预期的那样工作。如果当前存储桶名称与排除列表中的项匹配,则必须转到下一个存储桶名称。有人能帮我理解一下代码的问题吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-09-22 05:20:59

re.match将只匹配字符串的开头。您可以使用in代替正则表达式:

代码语言:javascript
复制
if exclusion_items in bucket_name:
    return False
else:
    continue

也就是说,这个函数可以重写为:

代码语言:javascript
复制
def valid_bucket(bucket_name):
    bucket_exclusion_list = ['do-not-delete', 'aws-config', 'elasticbeanstalk']
    return all(item not in bucket_name for item in bucket_exclusion_list)
票数 1
EN

Stack Overflow用户

发布于 2021-09-22 05:29:04

只需更改您的函数,如下所示:

代码语言:javascript
复制
import re
def valid_bucket(bucket_name):
    bucket_exclusion_list = ['do-not-delete', 'aws-config', 'elasticbeanstalk']
    regex = "|".join(bucket_exclusion_list)
    if re.search(rf'{regex}', bucket_name):
        return True
    return False

if (valid_bucket(bucket_name)):
    print ("VALID")
else:
    print ("INVALID")

存储桶名称= my-bucket的输出

代码语言:javascript
复制
INVALID

存储桶名称= do-not-delete my-bucket的输出

代码语言:javascript
复制
VALID
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69278512

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档