我该如何搜索&用数字+ 1000替换数字

时间:2013-01-03 18:59:44

标签: python regex json

我正在使用具有行和列值的JSON文件,我需要根据这些值创建唯一ID。我们决定将值行和列组合在一起,并确保每个值由四位数字表示(每个都加1000)。

例如:

"Col_Row": "1 - 145"必须与"Geo_ID": "10011145"

类似

我想也许我可以用Python和正则表达式做到这一点,因为我必须搜索"Col_Row"

以下是我所拥有的:

output = re.sub(r'"Col_Row: "(.*?)",', r'\1', test);
output = output.split(' - ')
[1000+int(v) for v in output]

所以我可以获得这些值,但现在我不知道如何使用这些值搜索/替换非常大的JSON文件。

2 个答案:

答案 0 :(得分:1)

使用此正则表达式(?<=\D|^)(\d{5,}|1[1-9]\d\d|1\d[1-9]\d|1\d\d[1-9]|[2-9]\d{3})(?=\D|$)

(?<=\D|^) symbols before digit
(\d{5,}|1[1-9]\d\d|1\d[1-9]\d|1\d\d[1-9]|[2-9]\d{3}) symbols > 1000
(?=\D|$) symbols after digit

答案 1 :(得分:0)

通过回调函数找到如何对正则表达式引用进行计算,如此问题所示:Python re.sub question

所以这里的python对我有用:

示例:

import re
test = '"Properties" : { "Col_Row": "1 - 145", ... "Col_Row": "130 - 240" ... }}'
def repl(m):
  num = "%d%d" % (int(m.group(1))+1000,int(m.group(2))+1000)
  string = '"Geo_ID": "%s", "Col_Row": "%s - %s",' % (num,m.group(1),m.group(2))
  return string
output = re.sub(r'"Col_Row": "(.*?) - (.*?)",', repl, test)

输出:'"Properties" : { "Geo_ID": "10011145", "Col_Row": "1 - 145", ... "Geo_ID": "11301240", "Col_Row": "130 - 240" ... }}'

现在真实的东西(操纵文件):

input = open('fishnet.json','r')
input_list = input.readlines()
output = open('updated.json','w')
for line in input_list:
  updated = re.sub(r'"Col_Row": "(.*?) - (.*?)",', repl, line)  
  output.write(updated)
output.close()
input.close()