Powershell使用“-”,数字和“ .xml”分割字符串

时间:2019-08-16 07:18:46

标签: regex powershell

$string = abc_test.txt-1234.xml  
$string2 = abc_test.txt-456789.xml  
$string3 = MFG-123 abc_dev.txt-11999.xml  

尝试拆分,以便我得到“ -1234.xml”之前的字符串,“-”以及数字和“​​ .xml”之前的任何内容。

$new = $string -Split'(?=-\d)'
$new[0]

这对于string3失败,并返回“ MFG”,但我需要“ MFG-123 abc_dev.txt”

2 个答案:

答案 0 :(得分:1)

您可以使用

$string -replace '-\d+\.[^.]*$'

请参见regex demo

详细信息

  • --连字符
  • \d+-1个以上数字
  • \.-一个点
  • [^.]*-除.以外的0多个字符
  • $-字符串的结尾。

测试:

>>'abc_test.txt-1234.xml' -replace '-\d+\.[^.]*$'
abc_test.txt
>>'abc_test.txt-456789.xml' -replace '-\d+\.[^.]*$'
abc_test.txt
>>'MFG-123 abc_dev.txt-11999.xml'-replace '-\d+\.[^.]*$'
MFG-123 abc_dev.txt

答案 1 :(得分:0)

如果要使用拆分,则可以使用正向前瞻(?=-\d)来断言直接在右边的是-和一个数字。 T

添加嵌套的否定前瞻(?!.*-\d),以断言接下来将不再有那些匹配项。

(?=-\d(?!.*-\d))

说明

  • (?=正向查找,断言直接在右边的是
    • -\d匹配-和一个数字
    • (?!负向前进,断言右边的不是
      • .*-\d匹配除换行符0次以上以外的所有字符,然后匹配-和一个数字
    • )提前关闭
  • )提前关闭

Regex demo

$string = 'abc_test.txt-1234.xml'
$string2 = 'abc_test.txt-456789.xml'
$string3 = 'MFG-123 abc_dev.txt-11999.xml'

$split = $string -Split'(?=-\d(?!.*-\d))'
echo $split[0] # abc_test.txt
echo $split[1] # -1234.xml

$split2 = $string2 -Split'(?=-\d(?!.*-\d))'
echo $split2[0] # abc_test.txt
echo $split2[1] # -456789.xml

$split3 = $string3 -Split'(?=-\d(?!.*-\d))'
echo $split3[0] # MFG-123 abc_dev.txt
echo $split3[1] #-11999.xml