2016-06-13 5 views
-1

У меня был аналогичный вопрос here, который я смог решить.Если строка содержит слово X, выберите только слово Y

Что мне нужно, если строка содержит слово X, выберите только слово Y.

Я хочу быть в состоянии сказать, если эта строка содержит «azureStorage», затем выберите «MyStorage»

<add name="azureStorage" connectionString="DefaultEndpointsProtocol=https;AccountName=mystorage;AccountKey=myKey" /> 

Самое близкое, что у меня есть это регулярное выражение, которое работает с regex101, но не с C#.

(?<=(azureStorage)...................................................AccountName=).[^;]* 

Очевидно, что это нехорошее решение.

Here is a link to the example on Regex 101

+2

Зачем использовать regex10 1, если вам нужно регулярное выражение .NET? Регулятор regex101 не поддерживает синтаксис и функции .NET. Тест на regexhero.net или regexstorm.net. –

+5

Вместо использования регулярных выражений, почему бы не разобрать XML и затем проанализировать строку соединения? – juharr

+1

Почему бы не использовать 'azureStorage. * AccountName = ([^;] *)' и захватить захваченную группу # 1 – anubhava

ответ

1

Ограничение просмотра назад к только строки azureStorage, а затем захватить что-нибудь после того, как AccountName= это не ;:

(?<=azureStorage).*AccountName=([^;]+) 

Вы можете добавить проверку граничное слово в конце концов, в случае AccountName является последним компонентом соединительной строки:

(?<=azureStorage).*AccountName=([^;]+)\b 
+0

Это вместе с ответом @anubhava и доступом к захваченной группе для меня. У juharr был хороший ответ для синтаксического анализа XML, но строка xml, которую я опубликовала, была просто примером, и я хотел знать, как это сделать для любого текста. Благодарю. – Sharpiro

Смежные вопросы