本帖最后由 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 );
- }
- }
-
- $arr
复制代码
|