$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”
答案 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次以上以外的所有字符,然后匹配-
和一个数字)
提前关闭)
提前关闭$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