使用正则表达式根据限制字符分割字符串

我有一个问题,我需要使用给定的字符串构建一个 Python 字典。该字符串具有一定的模式,如下所示:


string = 'streetName=BENEDITO DE PAULA, QD 03 LT 03, state=AM, complement=SJ BANDEIRANTES, number=4, country=BRA'

分割不能用逗号来完成,因为文本中间有一个逗号需要变成字符串。我需要通过生成下面的列表来完成拆分,以便稍后它成为字典。字典的键是每个相等的正弦(=)的分隔符,值是后续文本。


list = ['streetName=BENEDITO DE PAULA, QD 03 LT 03', 'state=AM', 'complement=SJ BANDEIRANTES', 'number=4', 'country=BRA']

所以我需要从正则表达式生成一个列表,我认为应该考虑文本(, TEXT=)


然后我将生成一个字典如下


dict(v.split("=") for v in re.split("(REGEX)", string))

正在使用下面的功能,但它不能解决这种情况下的问题


def convert_to_json(x):

    dic = dict(v.split("=") for v in x.split(","))

    return json.dumps({k.strip():v for (k,v) in dic.items()})


慕田峪4524236
浏览 99回答 2
2回答

隔江千里

您可以在模式上进行拆分\w+=,因为您知道键不包含非单词字符,并捕获拆分字符。这会给你留下尾随空格和逗号,但这并不难清理:import restring = 'streetName=BENEDITO DE PAULA, QD 03 LT 03, state=AM, complement=SJ BANDEIRANTES, number=4, country=BRA'pairs = re.split(r'(\w+=)', string)[1:]   [a + b.strip(', ') for a, b in zip(pairs[::2], pairs[1::2])]结果是 :['streetName=BENEDITO DE PAULA, QD 03 LT 03', 'state=AM', 'complement=SJ BANDEIRANTES', 'number=4', 'country=BRA']

米琪卡哇伊

这里写正则表达式会很困难,因为贪婪匹配会匹配太多逗号,非贪婪匹配会匹配太少逗号。相反,我会通过用逗号分割文本来解决这个问题,然后检查每个子字符串以查看它是否包含等号。def convert_to_dict(s):    raw_items = s.split(", ")    items = []    for item in raw_items:        if "=" in item:            items.append(item)        elif len(items) > 0:            items[-1] += ", " + item        else:            raise ValueError("Invalid string: dictionary keys cannot contain commas")    result = {}    for item in items:        key, value = item.split("=", maxsplit=1)        result[key] = value    return result
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python