本帖最后由 WHY 于 2022-12-3 10:12 编辑
| $s = @' | | ab $( ) :bub.Bub11 | | - :TA_Fbv "T " * $q$\m.co | | 中国 ac :bub.Bub65 * a.b | | >windows - china * cdef | | 小 日本 japen :bub.Bub10 ;;c.e | | | | | ac ${ } :bub.Bub18 | | < | | ZZ :bub.Bub26 | | | | | | #bub Bub10 m ;;1 小日本 | | 我之前序号是10 | | 最后是3 | | #bub Bub | | | | | | #bub Bub11 m | | 我之前序号是11 | | 最后是1 | | #bub Bub 11 | | | | #bub Bub18 m ;;6 | | 我之前序号是18 | | 最后是4 | | #bub Bub 4 | | | | #bub Bub65 m ;; | | 我之前序号是18 | | 最后是2 | | '@ | | | | $arr = [Collections.ArrayList](($s -split '(?:\r?\n)+#bub Bub\d+ m')[0] -split '\r?\n'); | | $count = $arr.Count; | | $hash = @{}; | | $global:n = 0; | | | | forEach( $m In [regex]::Matches($s, '(?im)^#bub Bub(\d+) m(?:(?!^#bub Bub\d+ m)[\s\S])+') ){ | | $key = $m.Groups[1].Value; | | $value = $m.Groups[0].Value.Trim("`r`n"); | | if( !$hash.Contains($key) ){ | | $hash.Add( $key, $value ); | | } | | } | | | | for( $i = 0; $i -lt $count; $i++ ){ | | $m = $arr[$i] -match '^([^:]+):bub\.Bub(\d+)'; | | if( $m ){ | | $arr[$i] = [regex]::Replace($arr[$i], '(?i)(?<=bub\.Bub)\d+',{return (++$global:n)}); | | $key = $matches[2]; | | if( $hash.Contains($key) ){ | | $str = $hash[$key] -replace '(?<=^#bub Bub)\d+ m.*(?=\r?\n)', ('' + $global:n + ' m ;;' + $matches[1]); | | }else{ | | $str = '#bub Bub' + $global:n + ' m ;;' + $matches[1] + "`r`n我是新来的"; | | } | | [void]$arr.Add( "`r`n" + $str ); | | } | | } | | | | $arrCOPY |
|