亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

使用正則表達式根據限制字符分割字符串

使用正則表達式根據限制字符分割字符串

慕田峪4524236 2023-10-26 15:49:23
我有一個問題,我需要使用給定的字符串構建一個 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()})
查看完整描述

2 回答

?
隔江千里

TA貢獻1906條經驗 獲得超10個贊

您可以在模式上進行拆分\w+=,因為您知道鍵不包含非單詞字符,并捕獲拆分字符。這會給你留下尾隨空格和逗號,但這并不難清理:


import re


string = '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']


查看完整回答
反對 回復 2023-10-26
?
米琪卡哇伊

TA貢獻1998條經驗 獲得超6個贊

這里寫正則表達式會很困難,因為貪婪匹配會匹配太多逗號,非貪婪匹配會匹配太少逗號。相反,我會通過用逗號分割文本來解決這個問題,然后檢查每個子字符串以查看它是否包含等號。


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


查看完整回答
反對 回復 2023-10-26
  • 2 回答
  • 0 關注
  • 131 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號