Я делаю парсер с использованием Regex в PowerShell, и он работает очень хорошо до сих пор, за исключением того, что у меня есть.Захват группового номера
\s*([a-zA-Z_]+)\s*=(?:\s*"(.*)"|([^;#]*))
Я сделал это Regex чтобы соответствовать, с успехом, эти сценарии:
Name= "Value" ;Comment
Желательный все в кавычки после =
и игнорирующие остальные
Name=Value ;Comment
Will взять все после =
до ;
или #
в качестве значения
Теперь это здорово, но проблема, с которой я столкнулся, заключается в том, что сценарий будет соответствовать Value [2], а второй сценарий будет соответствовать Value [3]. Это заставляет меня проверить, какой из них содержит что-то для окончательного значения, которое я не считаю чистым, и я уверен, что это не обязательно. Итак, возникает вопрос: как Value [2] может содержать результат этих двух разных групп? (Использование совершенно другой Regex не проблема, я переписать это одно уже несколько раз)
Как о чем-то вроде этого : ['\ S * ([a-zA-Z_] +) \ s * = \ s * ("?) ([^ "] *?) \ 2 \ s * [; #]'] (https://regex101.com/r/R9LcE3/2) – Faibbus
Это больше не будет захватывать 'Name =" Value1; Value2 "' И не будет занимать пробел после =, если не указаны кавычки: 'Name = найденный ' Спасибо – Blah
Я думаю, было бы лучше сделать чередование группой захвата и remo ve внешние двойные кавычки на втором шаге: '^ \ s * (\ w +) \ s * = \ s * (". *? "| [^; #] *)' –