regex - Powershell用 “-”和数字以及 “.xml”分割字符串

标签 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]

这对于s​​tring3失败,并返回“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/

    相关文章:

    regex - Clojure 解析字符串

    java - 整个字符串的正则表达式

    PowerShell:什么是 System.IO.StreamWriter 和 System.Diagnostics.ProcessStartInfo?

    powershell - 如何访问 PowerShell ($args) 中的所有参数?

    powershell - 后台作业过早结束

    python - 如何扫描允许转义字符的字符串文字?

    javascript - 正则表达式检查它是否是 url 的根目录, "", "/", "/index.php"

    regex - 使用 grep 查找具有超过 1 个匹配项的文件

    powershell - 是否可以在Powershell多行命令中使用注释?

    powershell - Jenkins Powershell 写入控制台