Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.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_String_Powershell_Replace - Fatal编程技术网

Regex PowerShell替换字符串中的数字

Regex PowerShell替换字符串中的数字,regex,string,powershell,replace,Regex,String,Powershell,Replace,我不是这样一个regex专家,坦率地说,我正在尽可能避免它 我想创建一个新的$String,其中字符串中的数字用+1更新。此数字可以是一个或两个数字,并且始终位于两个括号之间 发件人: $String = "\\Server\c$\share_1\share2_\Taget2[1] - 2014-07-29.log" $String = "\\Server\c$\share_1\share2_\Taget2[2] - 2014-07-29.log" 至: $String = "\\Serve

我不是这样一个
regex
专家,坦率地说,我正在尽可能避免它

我想创建一个新的
$String
,其中字符串中的数字用
+1
更新。此数字可以是一个或两个数字,并且始终位于两个括号之间

发件人:

$String = "\\Server\c$\share_1\share2_\Taget2[1] - 2014-07-29.log"
$String = "\\Server\c$\share_1\share2_\Taget2[2] - 2014-07-29.log"
至:

$String = "\\Server\c$\share_1\share2_\Taget2[1] - 2014-07-29.log"
$String = "\\Server\c$\share_1\share2_\Taget2[2] - 2014-07-29.log"

谢谢您的帮助。

如果您想避免使用正则表达式:

$String = "\\Server\c$\share_1\share2_\Taget2[1] - 2014-07-29.log"
$parts = $string.Split('[]')
$Newstring = '{0}[{1}]{2}' -f $parts[0],(1 + $parts[1]),$parts[2]
$Newstring
\\Server\c$\share_1\share2_\Taget2[2] - 2014-07-29.log

如果要避免使用正则表达式:

$String = "\\Server\c$\share_1\share2_\Taget2[1] - 2014-07-29.log"
$parts = $string.Split('[]')
$Newstring = '{0}[{1}]{2}' -f $parts[0],(1 + $parts[1]),$parts[2]
$Newstring
\\Server\c$\share_1\share2_\Taget2[2] - 2014-07-29.log
使用正则表达式:

$s = "\\Server\c$\share_1\share2_\Taget2[1] - 2014-07-29.log"
$s -replace "(?<=\[)(\d+)","bla"
所以你可以这样做:

$s = "\\Server\c$\share_1\share2_\Taget2[1] - 2014-07-29.log"
$s -match "(?<=\[)(\d+)" | Out-Null  ## find regex matches
$newNumber = [int]$matches[0] + 1
$s -replace "(?<=\[)(\d+)",$newNumber
...
$re = [Regex]"\[(\d+)\]"
while (Test-Path -LiteralPath $filename) {
  $filename = $re.Replace($filename, $callback)
}
使用正则表达式:

$s = "\\Server\c$\share_1\share2_\Taget2[1] - 2014-07-29.log"
$s -replace "(?<=\[)(\d+)","bla"
所以你可以这样做:

$s = "\\Server\c$\share_1\share2_\Taget2[1] - 2014-07-29.log"
$s -match "(?<=\[)(\d+)" | Out-Null  ## find regex matches
$newNumber = [int]$matches[0] + 1
$s -replace "(?<=\[)(\d+)",$newNumber
...
$re = [Regex]"\[(\d+)\]"
while (Test-Path -LiteralPath $filename) {
  $filename = $re.Replace($filename, $callback)
}

另一个选项是使用带有脚本块的
Regex
类的方法(代码取自Roman Kuzmin):

现有文件的处理方式如下:

$s = "\\Server\c$\share_1\share2_\Taget2[1] - 2014-07-29.log"
$s -match "(?<=\[)(\d+)" | Out-Null  ## find regex matches
$newNumber = [int]$matches[0] + 1
$s -replace "(?<=\[)(\d+)",$newNumber
...
$re = [Regex]"\[(\d+)\]"
while (Test-Path -LiteralPath $filename) {
  $filename = $re.Replace($filename, $callback)
}

请注意,必须在此处使用带有参数
-LiteralPath
测试路径
,因为文件名包含方括号,否则会被解释为。

另一个选项是使用带有脚本块的
Regex
类的方法(代码取自Roman Kuzmin):

现有文件的处理方式如下:

$s = "\\Server\c$\share_1\share2_\Taget2[1] - 2014-07-29.log"
$s -match "(?<=\[)(\d+)" | Out-Null  ## find regex matches
$newNumber = [int]$matches[0] + 1
$s -replace "(?<=\[)(\d+)",$newNumber
...
$re = [Regex]"\[(\d+)\]"
while (Test-Path -LiteralPath $filename) {
  $filename = $re.Replace($filename, $callback)
}

请注意,必须在此处将
测试路径
与参数
-LiteralPath
一起使用,因为您的文件名包含方括号,否则将被解释为正则表达式中的

转义括号(它们是有意义的,不是文字):
\[\d+\]
。如果您确定数字只能有一个或两个数字,那么您也可以明确表示:
\[\d[\d]\]
\[\d\d?\]
谢谢阿德里亚诺:)这似乎已经部分起作用了
$String-替换“\[\d+\]”,“[bla]”
现在如何更新括号内的数字?在regex中转义括号(它们是有意义的,不是文字):
\[\d+\]
。如果您确定数字只能有一个或两个数字,那么您也可以将其明确化:
\[\d[\d]\]
\[\d\d?\]
谢谢您Adriano:)这似乎已经部分起作用了
$String-替换“\[\d+\]”,“[bla“
我现在如何更新括号内的数字?+1-同样重要的是要注意,此处添加的顺序很重要,
1+
而不是
…+1
。后者将连接一个字符串。谢谢Mjonior,这确实是一种很好的方法,我确实想知道为什么
1+
在字符串之前。我更新了问题,以更好地反映我的问题。很抱歉造成混淆。我建议您问一个新问题,因为检查文件是否存在与增加文件名中的数字不同。+1-还需要注意的是,这里的加法顺序很重要,所以请注意
1+
而不是
…+1
。后者将连接一个字符串。谢谢Mjonior,这确实是一种很好的方法,我确实想知道为什么
1+
在字符串之前。我更新了问题,以更好地反映我的问题。很抱歉造成混淆。我建议你问一个新问题,因为检查文件是否存在不同于增加文件名中的数字。谢谢你,拉夫,这会有用的。但是,在第二次运行脚本时,如何检查该文件名是否已在使用中?很难将正确的
$Path
输入到
测试路径
,因此它会创建新的文件名。与@Entbark所说的一样,请询问另一个问题,因为这两个问题完全不同。谢谢Raf,这会起作用。但是,在第二次运行脚本时,如何检查该文件名是否已在使用中?很难将正确的
$Path
输入到
测试路径
,因此它会创建新的文件名。与@Entbark所说的一样,请询问另一个问题,因为这两个问题完全不同。