Board logo

标题: [问题求助] [已解决]powershell按层级和先后顺序修改每行前的序号 [打印本页]

作者: meixi    时间: 2022-12-16 15:04     标题: [已解决]powershell按层级和先后顺序修改每行前的序号

本帖最后由 meixi 于 2022-12-17 15:35 编辑

下面的图片, 左侧是要处理的源文本, 右侧框中是处理后的效果, 同种颜色表示它们在同一层级的意思
注意事项:
1.进入到下一层级的标记是: 该层级之前的行开头有个 )   退出某一层级的标记是: 该层级之后的行开头有个 (
2.下一层级的起始序号是上一层最后面的序号其后加上1
3.每一层级的序号其先后顺序都修改为递加1
4.只改每一行前的序号, 序号前后的空格和文本都不要修改
5.示例文本中层级有三级, 实际情况可能会有N级

  1. $s= @'
  2. 1 中间
  3. 1 国家
  4. +
  5. 3 日
  6. +
  7. 9 韩
  8. 10 国
  9. -
  10. ) 13 中
  11. 41 日
  12. 48 美
  13. -
  14. 63 中
  15. ) 43 日
  16. 12 美
  17. 22 丽
  18. (
  19. 43 美
  20. (
  21. 6 日
  22. 9 中
  23. ) 13 好
  24. 43 日
  25. ) 43 子
  26. 02 大家
  27. 82 中
  28. (
  29. 43 华
  30. -
  31. 72 行人
  32. 63 列
  33. 14 必须
  34. (
  35. -
  36. 1 日
  37. 1 本
  38. +
  39. 1 美丽
  40. 1 国
  41. '@
  42. <# 处理后的效果:
  43. 1 中间
  44. 2 国家
  45. +
  46. 3 日
  47. +
  48. 4 韩
  49. 5 国
  50. -
  51. ) 6 中
  52. 61 日
  53. 62 美
  54. -
  55. 63 中
  56. ) 64 日
  57. 641 美
  58. 642 丽
  59. (
  60. 65 美
  61. (
  62. 7 日
  63. 8 中
  64. ) 9 好
  65. 91 日
  66. ) 92 子
  67. 921 大家
  68. 922 中
  69. (
  70. 93 华
  71. -
  72. 94 行人
  73. 95 列
  74. 96 必须
  75. (
  76. -
  77. 10 日
  78. 11 本
  79. +
  80. 12 美丽
  81. 13 国
  82. #>
复制代码

作者: idwma    时间: 2022-12-16 18:03

  1. $a=@(0)
  2. $s -split '\n'|%{
  3.     if($_ -match '^\D*\d+'){
  4.         $a[-1]+=1
  5.         $_ -replace '(?<=^\D*)\d+',($a -join '')
  6.     }else{$_}
  7.     if($_ -match '^\s*\)'){$a+=0}
  8.     if($_ -match '^\s*\('){$a=$a[0..($a.count-1-1)]}
  9. }
复制代码

作者: meixi    时间: 2022-12-17 15:35

回复 2# idwma

多谢!




欢迎光临 批处理之家 (http://bbs.bathome.net/) Powered by Discuz! 7.2