2013-01-17 6 views
0

J'ai ce fichier json. Une partie est donnée ci-dessous:Regex correspondant aux nouvelles lignes

{ "has_more" : false, 
    "items" : [ { "aliases" : [ "http://www.stackoverflow.com" ], 
     "api_site_parameter" : "stackoverflow", 
     "markdown_extensions" : [ "Prettify" ], 
     "name" : "Stack Overflow", 
     "related_sites" : [ { "name" : "Stack Overflow Chat", 
       "relation" : "chat", 
       "site_url" : "http://chat.stackoverflow.com" 
      } ], 
     "site_state" : "normal", 
     "site_type" : "main_site", 
     "site_url" : "http://stackoverflow.com", 
     "styling" : { "link_color" : "#0077CC", 
      "tag_background_color" : "#E0EAF1", 
      "tag_foreground_color" : "#3E6D8E" 
      } 
     }, 
     { "api_site_parameter" : "serverfault", 
     "markdown_extensions" : [ "Prettify" ], 
     "name" : "Server Fault", 
     "related_sites" : [ { "api_site_parameter" : "meta.serverfault", 
       "name" : "Meta Server Fault", 
       "relation" : "meta", 
       "site_url" : "http://meta.serverfault.com" 
      }, 
      { "name" : "Chat Stack Exchange", 
       "relation" : "chat", 
       "site_url" : "http://chat.stackexchange.com" 
      } 
      ], 
     "site_state" : "normal", 
     "site_type" : "main_site", 
     "site_url" : "http://serverfault.com", 
     "styling" : { "link_color" : "#10456A", 

Je veux faire correspondre des chaînes comme

 "related_sites" : [ { "name" : "Stack Overflow Chat", 
       "relation" : "chat", 
       "site_url" : "http://chat.stackoverflow.com" 
      } ], 

et

 "related_sites" : [ { "api_site_parameter" : "meta.serverfault", 
       "name" : "Meta Server Fault", 
       "relation" : "meta", 
       "site_url" : "http://meta.serverfault.com" 
      }, 
      { "name" : "Chat Stack Exchange", 
       "relation" : "chat", 
       "site_url" : "http://chat.stackexchange.com" 
      } 
      ], 

sans activer multiligne. Une idée de comment faire ça?

+3

analyseur Utilisation JSON s'il vous plaît. – nhahtdh

Répondre

1

"Activer la multiligne" correspond exactement à la correspondance de plusieurs lignes. C'est pourquoi on l'appelle "multiline". Mais puisque tout ce qu'il fait est de changer . pour inclure \n, vous pouvez simplement écrire (.|\n) à la place.

Mais étant donné que c'est JSON, pourquoi diable utilisez-vous une regex? Juste l'analyser à une structure de données et travailler à partir de là.

data = json.loads(json_string) 
for item in data['items']: 
    print item['related_sites'] 
+0

+1 pour "Mais étant donné que c'est JSON, pourquoi diable utilisez-vous une regex dessus?" – Srinivas

+0

Je suis d'accord JSON analyse est le meilleur ici, mais parfois vous voulez faire une recherche et remplacer dans un IDE où regexp fait l'affaire – Iftah

+0

si vous le faites manuellement et une fois, vous pouvez aussi bien chercher '\ brelated_sites \ b' avec confirmation et globe oculaire chaque match – Eevee

0

S'il n'y a pas de tableaux à l'intérieur des éléments "related_sites", essayez:

"related_sites" : \[(?:[^\]]*\n?)*\]

Questions connexes