匹配Python中以逗号分隔的AWS区域的正则表达式

1 投票
3 回答
52 浏览
提问于 2025-04-14 16:11

我有一个目标字符串,里面有多个项目,我需要找到并提取用逗号分隔的AWS区域的值:

data = '''
appname=ivr
age=2years
region='us-east-1a,us-east-2a,us-east-1c'
'''

我想在输出中得到regions的值,格式是'us-east-1a,us-east-2a,us-east-1c'

我尝试使用这个正则表达式,但它只对没有逗号的单个值有效:

'(af|il|ap|ca|eu|me|sa|us|cn|us-gov|us-iso|us-isob)-(central|north|.       (north(?:east|west))|south|south(?:east|west)|east|west)-\d{1}'

3 个回答

0

另一种方法是使用 csv 库来解析数据:

import csv

data = """
appname=ivr
age=2years
region='us-east-1a,us-east-2a,us-east-1c'
"""

reader = csv.reader(data.strip().splitlines(), delimiter="=", quotechar="'")
parsed = dict(reader)
print(parsed)
print(parsed['region'])

输出结果:

{'appname': 'ivr', 'age': '2years', 'region': 'us-east-1a,us-east-2a,us-east-1c'}
us-east-1a,us-east-2a,us-east-1c

注意事项:

  • 表达式 data.strip().splitlines() 用来清理数据,并将其分成多行。
  • 我们把这些行传递给 csv.reader,并指定等号作为字段的分隔符。
  • 每一行被分成两个字段,然后我们调用 dict() 将它们转换成字典。
0

我稍微试了一下,想出了这个正则表达式,你可以试试看:

us-[a-z]+-[^\r\n,']+
0

你可以在正则表达式的末尾加一个可选的逗号,然后把它放在一个重复的组里:

pat = r'((?:af|il|ap|ca|eu|me|sa|us|cn|us-gov|us-iso|us-isob)-(?:central|north(?:east|west)?|south(?:east|west)?|east|west)-\d+[a-z]?,?)+'

out = re.search(pat, data)
print(out.group())

输出结果:

us-east-1a,us-east-2a,us-east-1c

撰写回答