Python 使用正则表达式根据限制字符拆分字符串
我有一个问题,需要用给定的字符串构建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
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
函数。也就是说,根据逗号进行拆分,然后在结果列表中进行迭代,如果连续的单词以某个单词结尾,或者包含某个单词,或者您需要的任何内容,则使用逗号连接这些单词。