Я работаю над созданием регулярного выражения в PowerShell. Это начало события postbuild из VS2012 для преобразования sql, так что имена таблиц и имена столбцов в них не имеют пробелов. Как только это сработает, я могу изменить скрипт, который я уже должен заменить содержимым файла с помощью строки регулярного выражения. Я работал с this tutorial, но я не могу заменить пространство (\ s) знаком подчеркивания, когда это пространство находится между открытой и закрытой квадратной скобкой.Регулярное выражение для символов внутри квадратных скобок
Вот пример того, как я хотел бы преобразовать SQL:
Convert:
select * from [Existing product] where [Existing product].[Desc value] = 26
To:
select * from [Existing_product] where [Existing_product].[Desc_value] = 26
Когда я запускаю этот скрипт в Powershell ISE:
#Example of PowerShell Regex Replace
$newline = '
'
$strText = 'select * from [Existing product] where [Existing product].[Desc value] = 26'
$Pattern = '(?<=\[)(\s(?<=\s))(?=\])'
$New = "_"
$newline
'SourceText: '
$strText
$newline
$strReplace = [regex]::replace($strText, $pattern, "$New")
"We will now replace $Pattern with $New :"
$newline
$strReplace
I получите этот результат:
PS C:\> C:\REGEX.ps1
SourceText:
select * from [Existing product] where [Existing product].[Description value] = 26
We will now replace (?<=\[)(\s(?<=\s))(?=\]) with _ :
select * from [Existing product] where [Existing product].[Description value] = 26
Где я надеюсь увидеть строку с пробелами, замененными символами подчеркивания, выше.
Мое регулярное выражение в настоящее время (?<=\[)(\s(?<=\s))(?=\])
, но, по-видимому, оно выделяет только места, где квадратная скобка находится рядом с ней. Что мне не хватает в regex выше?
Пожалуйста, дайте мне знать, если у вас есть вопросы и спасибо за помощь!
Спасибо за ваш пост! Да, ваш второй вариант: '(? <= \ [[^ \]] *?) (\ S (? <= \ S)) (? = [^ \ [] *? \])' Сделал трюк для что я искал. Еще раз спасибо! –
Я также проверил его с несколькими пробелами между квадратными скобками, и это тоже сработало! –
Это все еще взломать. Я не думаю, что regexp - это «швейцарская армейская цепная пила», которую мы должны использовать, чтобы нарезать все. –