2015-02-27 2 views
0

Я пытаюсь получить строку из файла, который существует между двумя строками, для которых я использую регулярное выражение ниже ... И это работает!Powershell - регулярное выражение

$Content = Get-Content $File 
$Regex = [regex] "(?is)(?<=\b$String\b).*?(?=\b$String\b)" 
$Matches = $Regex.Matches($Content) 

Но у меня есть проблема. Фактическая строка, которую я ищу, задается пользователем и варьируется в размере от одного до двадцати четырех символов. Если он максимален, он больше не разделяется «$ String» пробелом и, следовательно, становится частью этой строки, и поэтому я думаю, что это проблема, когда вы не можете ее найти. Теперь медведь со мной, и я объясню формат, что я ищу ... Он идет ...

$Name[Ten White Spaces]$StartOfStringImLookingFor[If string reaches 24 characters then 'no' white space]$Name 

Так что, если проблема в регулярном выражении не в состоянии выполнять свою функцию, если $StartOfStringImLookingFor достигает $Name, тогда идеальная ситуация была бы ...

Найти $Name и вернуть следующие 34 символа, но возможно ли это? Я не делаю этого, и поиск ничего не возвращает.

ответ

0

Find $ Name и вернуть следующие 34 символов:

$regex = "$([regex]::Escape($Name))(.{34})" 
[regex]::Matches($Content,$regex) | 
foreach {$_.groups[1].value} 
+0

Большое спасибо за Ваш ответ! Как я могу получить 34 символа после первого совпадения только в переменную? Извините, мой уровень является базовым, и я пробовал, но не был успешным. Затем я буду выводить эту переменную в файл. Изменить - Извините, сделал это. Спасибо за вашу помощь! – OreoRyan

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