删除两个子字符串之间的所有子字符串实例

时间:2016-02-19 20:26:18

标签: python python-3.x

我有一个以下类型的字符串:

original = '''{ "type": "Feature", "properties": { "POSTNR_TXT": "2740", "POSTBYNAVN": "Skovlunde", "POSTNR_FRA": "2740", "POSTNR_TIL": "2740" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 12.370879248624883, 55.702694453782499, -999.0 ], [ 12.368759608893962, 55.712782195962298, -999.0 ], [ 12.37592021897154, 55.714470717642058, -999.0 ], [ 12.379768987708616, 55.72179157095912, -999.0 ], [ 12.387458937414024, 55.697314488019053, -999.0 ], [ 12.370879248624883, 55.702694453782499, -999.0 ] ] ] } }, 
{ "type": "Feature", "properties": { "POSTNR_TXT": "2760", "POSTBYNAVN": "Måløv", "POSTNR_FRA": "2760", "POSTNR_TIL": "2760" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 12.263563465104953, 55.747721989578324, -999.0 ], [ 12.269722469884702, 55.755314897874221, -999.0 ], [ 12.269036118830314, 55.757243692362579, -999.0 ], [ 12.265194268837073, 55.747241588321643, -999.0 ], [ 12.263563465104953, 55.747721989578324, -999.0 ] ] ] } },
{ "type": "Feature", "properties": { "POSTNR_TXT": "2770", "POSTBYNAVN": "Kastrup", "POSTNR_FRA": "2770", "POSTNR_TIL": "2770" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 12.648007056263456, 55.646479764886891, -999.0 ], [ 12.647861947597349, 55.646179791784299, -999.0 ], [ 12.648845856031999, 55.644280146846299, -999.0 ], [ 12.627212246529135, 55.641560131234343, -999.0 ], [ 12.648007056263456, 55.646479764886891, -999.0 ] ] ] } }, 

我想从“POSTBYNAVN”中删除子字符串:“POSTNR_TIL”:这样我的新字符串就像这样:

new = '''{ "type": "Feature", "properties": { "POSTNR_TXT": "2740", "2740" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 12.370879248624883, 55.702694453782499, -999.0 ], [ 12.368759608893962, 55.712782195962298, -999.0 ], [ 12.37592021897154, 55.714470717642058, -999.0 ], [ 12.379768987708616, 55.72179157095912, -999.0 ], [ 12.387458937414024, 55.697314488019053, -999.0 ], [ 12.370879248624883, 55.702694453782499, -999.0 ] ] ] } }, 
{ "type": "Feature", "properties": { "POSTNR_TXT": "2760", "2760" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 12.263563465104953, 55.747721989578324, -999.0 ], [ 12.269722469884702, 55.755314897874221, -999.0 ], [ 12.269036118830314, 55.757243692362579, -999.0 ], [ 12.265194268837073, 55.747241588321643, -999.0 ], [ 12.263563465104953, 55.747721989578324, -999.0 ] ] ] } },
{ "type": "Feature", "properties": { "POSTNR_TXT": "2770", "2770" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 12.648007056263456, 55.646479764886891, -999.0 ], [ 12.647861947597349, 55.646179791784299, -999.0 ], [ 12.648845856031999, 55.644280146846299, -999.0 ], [ 12.627212246529135, 55.641560131234343, -999.0 ], [ 12.648007056263456, 55.646479764886891, -999.0 ] ] ] } }, 

我考虑了一些解决方案,但它们只会影响第一个实例。我想我需要某种正则表达式。

2 个答案:

答案 0 :(得分:1)

这摆脱了每个POSTBYNAVN部分。我想你可以自己弄清楚剩下的。干杯。

re.sub('\"POSTBYNAVN\":\s\"[a-zA-z]+\"\,\s', '', original)

编辑:

不幸的是,这个匹配"POSTBYNAVN": "M\xc3\xa5l\xc3\xb8v"并不匹配,因为它包含特殊符号,因此我将正则表达式更改为:

re.sub('\"POSTBYNAVN\":\s\"([^\s]+)\s', '', original)

([^\s]+)匹配任何单词,直到第一个空格,现在它按预期工作。 然而,最终的解决方案甚至不使用它,看起来像这样:

re.sub('\"POSTBYNAVN.*?POSTNR_TIL\":\s', '', original)

答案 1 :(得分:1)

对于python2,您应该查看here,对于python3,您应该查看here。现在我将编写一个可行的解决方案,但你应该阅读使用它。

re.sub('POSTBYNAVN.*?POSTNR_TIL', '', original)