Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/333.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用正则表达式根据限制字符拆分字符串_Python_Regex_Split - Fatal编程技术网

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

Python 使用正则表达式根据限制字符拆分字符串,python,regex,split,Python,Regex,Split,我有一个问题,需要用给定的字符串构建Python字典。 该字符串具有如下特定模式: string = 'streetName=BENEDITO DE PAULA, QD 03 LT 03, state=AM, complement=SJ BANDEIRANTES, number=4, country=BRA' 分裂不能用逗号来完成,因为文本中间有逗号需要变成字符串。 我需要通过生成下面的列表来完成拆分,以便以后它成为字典 字典的键是按相等正弦(=)分开的,值是后续文本 list = ['str

我有一个问题,需要用给定的字符串构建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']
<> >我需要从正则表达式中生成一个列表,我认为应该考虑文本<代码>(文本=)<代码> < /p> 然后我将生成一个字典,如下所示

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()})

这里很难编写正则表达式,因为贪婪匹配将匹配太多的逗号,而非贪婪匹配将匹配太少的逗号。相反,我会用逗号分割文本,然后检查每个子字符串是否包含等号来解决这个问题

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

这里很难编写正则表达式,因为贪婪匹配将匹配太多的逗号,而非贪婪匹配将匹配太少的逗号。相反,我会用逗号分割文本,然后检查每个子字符串是否包含等号来解决这个问题

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

您可以在模式
\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']

您可以在模式
\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']

假设您知道需要检查哪些词是不希望拆分的,那么可以使用python的
endswith
函数。也就是说,根据逗号进行拆分,然后在结果列表中进行迭代,如果连续的单词以某个单词结尾,或者包含某个单词,或者您需要的任何内容,则使用逗号将它们连接起来。假设您知道需要检查哪些单词而不希望拆分,则可以使用python的
endswith
函数。也就是说,根据逗号进行拆分,然后在结果列表中进行迭代,如果连续的单词以某个单词结尾,或者包含某个单词,或者您需要的任何内容,则使用逗号连接这些单词。