2016-08-10 2 views
-2

У меня есть следующий текст .....Использование регулярных выражений, чтобы найти определенный шаблон текста

('virtualMachines_20160810_VM02_name'),'2016710113655.vhd'))]" 
      }, 
      "caching": "ReadWrite" 
      }, 
      "dataDisks": [] 
     }, 
     "osProfile": { 
      "computerName": "[parameters('virtualMachines_20160810_VM02_name')]", 
      "adminUsername": "marc.kean", 
      "windowsConfiguration": { 
      "provisionVMAgent": true, 
      "enableAutomaticUpdates": true 
      }, 
      "secrets": [], 
      "adminPassword": "[parameters('virtualMachines_20160810_VM02_adminPassword')]" 
     }, 
     "networkProfile": { 
      "networkInterfaces": [ 
      { 
       "id": "[resourceId('Microsoft.Network/networkInterfaces', parameters('networkInterfaces_20160810_vm02308_name'))]" 
      } 
      ] 
     } 
     }, 

Я пытаюсь использовать регулярные выражения, чтобы точно соответствовать раздел этого текста. Раздел, который я хочу сопоставить, - это вся строка, содержащая текст «osProfile» (включая все пробелы в начале и конце строки) вплоть до всей строки (включая любые пробелы), включая строку чуть выше " networkProfile "

Это то, что у меня есть до сих пор, но это соответствует двум группам захвата, я хочу только конкретно указать текст, который я указал.

\s*"osProfile[\w|\W]*},(\s*"networkProfile") 

У меня есть это:

((\s*"osProfile[\w|\W]*?},)([\w|\W 
+2

является ли это JSON-файл? не легче ли получить его как объект, чем сделать регулярное выражение для его извлечения? – ssbb

ответ

1

не уверен, что ваш случай использования для использования регулярных выражений, но это то, что вы хотите:

\s*"osProfile":\s*\{[^\}]+\}[^\}]+\}, 

https://regex101.com/r/qA1nQ1/2

\s*"osProfile":\s*\{ 

доставит вам сообщение Первая строка

[^\}]+\} 

получит вы все вплоть до первого}

[^\}]+\}, 

получит вы все вверх до второго} сопровождаемое,

+0

Приятно видеть другой способ сделать это, спасибо –