2016-02-19 3 views
-1

У меня есть строка следующего вида:Удалите все экземпляры подстроки между двумя подстроками

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 ] ] ] } }, 

Я подумал о нескольких решениях, но они влияют только на первый случай. Я думаю, мне нужно какое-то регулярное выражение.

ответ

1

Вы должны смотреть here для python2 и here для Python3. Теперь я напишу положительное решение, но вы должны прочитать его для использования.

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

Это избавляет от каждой части POSTBYNAVN. Думаю, вы сами можете выяснить остальное. Приветствия.

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

EDIT:

К сожалению, это один не соответствует "POSTBYNAVN": "M\xc3\xa5l\xc3\xb8v", поскольку он содержит специальные символы, так что я не изменил регулярное выражение:

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

([^\s]+) спичек любое слово до первого места и теперь он работает по назначению. Однако окончательное решение не использовать даже это и выглядит следующим образом:

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