$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”
最佳答案
如果要使用拆分,则可以使用正向超前(?=-\d)
来断言直接在右侧的是-
和一个数字。 Ť
添加嵌套的否定超前(?!.*-\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
关于regex - Powershell用 “-”和数字以及 “.xml”分割字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57520410/