Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 将正则表达式中的换行符与powershell匹配_Regex_Powershell - Fatal编程技术网

Regex 将正则表达式中的换行符与powershell匹配

Regex 将正则表达式中的换行符与powershell匹配,regex,powershell,Regex,Powershell,我有一些数据如下所示: :setvar DatabaseName "CI_1814903104" :setvar DefaultFilePrefix "CI_1814903104" --etc. GO --etc. GO 我希望将所有sql cmd变量行(以:setvar开头的行)替换为空字符串,以便数据如下所示: :setvar DatabaseName "CI_1814903104" :setvar DefaultFilePrefix "CI_1814903104"

我有一些数据如下所示:

:setvar DatabaseName "CI_1814903104"
:setvar DefaultFilePrefix "CI_1814903104"
--etc.    

GO
--etc.    

GO
我希望将所有sql cmd变量行(以:setvar开头的行)替换为空字符串,以便数据如下所示:

:setvar DatabaseName "CI_1814903104"
:setvar DefaultFilePrefix "CI_1814903104"
--etc.    

GO
--etc.    

GO
此语句(其中
$script
包含数据)似乎起到了作用,但仍然保留了换行符:

$script -replace ":setvar(.*$)", ""
结果:

 
 
--etc.    

GO

我如何在比赛中加入新线?它似乎与之匹配,但实际上并未被替换。非常感谢您的帮助。

这假设您的数据是从某个文件读取的。根据您读取数据的方式,您可能有一个字符串集合而不是单个字符串

PS C:\> $script = Get-Content data.txt

# Get-Content returns each line as a string object in an Object[].
PS C:\> $script.GetType()

IsPublic IsSerial Name                                     BaseType
-------- -------- ----                                     --------
True     True     Object[]                                 System.Array

PS C:\> $script[0].GetType()

IsPublic IsSerial Name                                     BaseType
-------- -------- ----                                     --------
True     True     String                                   System.Object
如下所示,通过管道将内容输出到字符串将确保获得单个字符串,然后可以对windows换行符进行操作以删除相应的行

PS <C:\> $script = ( Get-Content data.txt | Out-String ).Trim()
PS <C:\> $script -replace ":setvar(.*)`n", ""
--etc.

GO
PS$script=(Get Content data.txt | Out String).Trim()
PS$script-replace“:setvar(.*)`n”
--等等。
去

感谢您在字里行间的阅读-是gc作为一个数组把我搞砸了。另外,将
r
n更改为\r\n,您将获得分数@普利茅斯223 Powershell中的转义字符是backtick。对于使用正则表达式的这种情况,这两种方法都有效——但通常情况并非如此。试试看。:)啊,明白了-我的问题是我尝试了你的,但它不起作用,所以我将表达式改为“:setvar(.*)\n”,它成功了。该文件仅包含换行符的\n。谢谢,明白了。这是我的坏假设windows马车返回。更有趣的是,这个表达式无论如何都应该抓住
\r
,所以保留它没有多大意义——我将为此编辑这篇文章。