匹配Python中以逗号分隔的AWS区域的正则表达式
我有一个目标字符串,里面有多个项目,我需要找到并提取用逗号分隔的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