如何用正则提取AWS策略ARN末尾的策略名并删除其他内容
用正则提取AWS IAM策略ARN最后一段策略名
问题
手里有一批AWS IAM策略ARN,想提取每个ARN里最后一个斜杠后面的策略名。之前用(?<=/).*,结果把第一个斜杠后面的所有内容都提出来了——比如带aws-service-role路径的ARN,会把aws-service-role/AWSSupportServiceRolePolicy全拿出来,这不符合需求,得找个正则解决。
可行的正则方案
方案一:精准匹配最后一段
用正则表达式 (?<=/)[^/]+$,拆解逻辑:
(?<=/):确保匹配内容的前面是一个斜杠[^/]+:只匹配非斜杠的字符,避免把中间路径包含进来$:锚定到字符串结尾,保证取的是最后一个斜杠后的内容
方案二:贪婪匹配后捕获目标
用正则 .*/([^/]+),逻辑是:
.*/:贪婪模式下会直接匹配到字符串里最后一个斜杠为止(贪婪特性会尽可能多匹配内容)([^/]+):用捕获组把最后一个斜杠后面的非斜杠内容单独抓出来
测试效果
拿复杂ARN arn:aws:iam::aws:policy/aws-service-role/AWSSupportServiceRolePolicy 测试,两个方案都会精准提取出 AWSSupportServiceRolePolicy,完全符合需求。
实际代码示例(Python)
import re # 示例ARN列表 arn_list = [ "arn:aws:iam::aws:policy/AmazonEC2FullAccess", "arn:aws:iam::aws:policy/IAMFullAccess", "arn:aws:iam::s:policy/CloudWatchAgentServerPolicy", "arn:aws:iam::aws:policy/aws-service-role/AWSSupportServiceRolePolicy", "arn:aws:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole" ] # 方案一提取 pattern1 = re.compile(r'(?<=/)[^/]+$') for arn in arn_list: print(pattern1.findall(arn)[0]) # 方案二提取 pattern2 = re.compile(r'.*/([^/]+)') for arn in arn_list: match_result = pattern2.search(arn) if match_result: print(match_result.group(1))
内容的提问来源于stack exchange,提问作者Ramesh Thiyagarajan
相关产品推荐
相关产品推荐

