我正在努力在 PowerShell 中创建正则表达式。这是从 VS2012 开始的构建后事件以转换 sql,以便我的表名和列名中没有任何空格。一旦这个工作,我可以修改一个脚本,我已经用正则表达式字符串替换文件的内容。我一直在使用本教程,但是当空格位于左方括号和右方括号之间时,我似乎无法用下划线替换空格 (\s)。
这是我想如何转换 sql 的示例:
转变:
select * from [Existing product] where [Existing product].[Desc value] = 26
到:
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
我得到这个结果:
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))(?=\])
,但显然它只选择方括号旁边的空格。我从上面的正则表达式中遗漏了什么?
如果您有任何问题,请告诉我,感谢您的帮助!