Python用for循环替换JSON列表中的内容吗?

时间:2020-07-28 23:08:19

标签: python json python-3.x replace formatting

我是python 3的新手,我正在开发REST API,以格式化包含许多字符串(有时为数千)的JSON中的某些字符,JSON具有以下结构:

  [
  [
    "city",
    "Street 158 No 96"
  ],
  [
    "city",
    "st 144 11a 11 ap 104"
  ],
  [
    "city",
    "Street83 # 85  - 22"
  ],
  [
    "city",
    "str13 #153  -  81"
  ],
  [
    "city",
    "street1h # 24 - 29"
  ]
]

所以我要在excel宏上替换掉它。

text = Replace(text, "st", " street ", , , vbTextCompare)
For i = 0 To 9 Step 1
    text = Replace(text, "street" & i, " street " & i, , , vbTextCompare)
    text = Replace(text, "st" & i, " street " & i, , , vbTextCompare)

无论数字如何,这都会将每个单元格格式化为“ street#”,现在的问题是当我尝试使用python进行此操作时,现在我已经学会了如何像这样替换列表中的多个值:

addressList= []
for address in request.json:

    address = [element

    .replace('st', 'street ')
    .replace('street1­', 'street 1')
    .replace('street2', 'street 2')
    .replace('street3', 'street 3')
    .replace('street4', 'street 4')
    .replace('street5­', 'street 5')
     

     #and so on for st too

    for element in address]

    addressList.append(address)

这种方法不仅时间长而且很丑陋,我想做以前的事情,但是我似乎无法在内部使用a替换,我应该在外部使用吗?

感谢您的帮助。

-编辑-

编辑了json格式,使其有效。

尝试了revliscano和它们都起作用的第四只鸟的回复,目前我使用的是revliscano的方法,因为它允许我仅用“一行”就可以从原始Json创建列表。

3 个答案:

答案 0 :(得分:1)

您可以使用匹配st和可选reet和可选空格的模式来代替使用多个替换调用,然后在组中捕获1个以上的数字。

\bst(?:reet)? ?(\d+)\b

Regex demo | Python demo

在替换中,使用捕获组street \1re.sub

单个元素的示例代码

import re
element = re.sub(r"\bst(?:reet)? ?(\d+)\b", r"street \1", "st 5")
print (element)

输出

street 5

答案 1 :(得分:0)

我将使用正则表达式解决此问题。尝试以下操作

admit

答案 2 :(得分:0)

您可以将正则表达式与字典混合使用以使其更快。

我在一个程序中使用了这样的功能

import re
def multiple_replace(adict, text):
    regex = re.compile("|".join(map(re.escape, adict.keys())))   
    return regex.sub(lambda match: adict[match.group(0)], text)

adict是字典,您可以在其中找到要替换的字符的映射。

对您来说可以

adict = {
    'street1­': 'street 1'
    'street2':'street 2',
    'street3': 'street 3',
    'street4': 'street 4',
    'street5­': 'street 5',
}

当然,您不能使用完全相同的功能。您将需要根据自己的需要编写另一个正则表达式,就像@The fourth bird一样