我在PowerShell中捕获了一个SVN日志,然后我尝试修改并删除除文件URL之外的所有内容。我遇到的问题是获取正则表达式以删除文件URL之前的所有内容。我的参赛作品符合:
M /trunk/project/application/myFile.cs
开头有两个空格,最初我试图用正则表达式替换,但似乎没有用,所以我使用了一个修剪并最终得到:
M /trunk/project/application/myFile.cs
现在我想摆脱文件状态指示器,所以我有一个正则表达式,如:
$ entry = $ entry.Replace(“^ [ADMR] \ s +”,“”)
其中$ entry是匹配的文件URL,但这似乎没有做任何事情,即使删除插入符只是查找值和空格也没有做任何事情。我知道$ entry是一个字符串,我原本认为Replace不起作用,因为$ entry不是字符串,但在脚本中运行Get-Member显示我有一个字符串类型。 svn文件指示符有什么特别之处,还是正则表达式以某种方式关闭?
答案 0 :(得分:2)
给出你的示例字符串:
$entry = 'M /trunk/project/application/myFile.cs'
$fileURL = ($entry -split ' /')[1]
答案 1 :(得分:1)
你的正则表达式不起作用,因为string.Replace
只是替换文字字符串而不知道正则表达式。您可能需要[Regex]::Replace
或仅-replace
运算符。
但是当在PowerShell中使用SVN时,我总是采用XML格式。 SVN允许所有命令使用--xml
选项,然后输出XML(如果它在两者之间死亡,则为无效)。
E.g:
$x = [xml](svn log -l 3 --verbose --xml)
$x.log.logentry|%{$_.paths}|%{$_.path}|%{$_.'#text'}
将为您提供所有途径。
但如果你需要正则表达式:
$entry -replace '^.*?\s+'
它将删除所有(包括)第一个空格序列的所有内容,这些空间具有额外的好处,您不需要记住那里可能出现的字符。