找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 11939|回复: 1

[问题求助] PowerShell将重复国家名字前的字母重新排序

[复制链接]
发表于 2022-12-1 07:50:48 | 显示全部楼层 |阅读模式
本帖最后由 meixi 于 2022-12-1 09:56 编辑

大家好!

图片中左侧是要处理的文本, 右侧是处理后的效果! 不同的颜色仅起到区分作用


要处理的文本中, 同一个国家前的字母不相同, 处理后要改成相同的,例如
中国河北 的前面是A
中国北京 的前面是B
处理后全改为A

按相同的逻辑,把后面国家名前的字母, 也按A-Z的顺序重新修改
----------------------------------------------------------------------------------------------------
国家名怎么定位?

1.国家名所在的行之前和之后,有如下规律,其中X是一个大写字母,其它都是固定的
aaa X=
A 中国 河北
aaa Xv=

2.国家名的字数不固定, 但其相对位置是固定的
其所在的行前肯定有一个空格
空格后就是要修改的大写字母
大写字母后有一个空格
空格后是国家名,国家名的文字是连续的
国家名后有一个空格
空格后的文本是任意字符
  1. $s = @'
  2. aaa A=
  3. A 中国 河北
  4. aaa Av=
  5. 河北人

  6. aaa B=
  7. B 中国 北京
  8. aaa Bv=
  9. 北京人

  10. aaa C=
  11. C 美国 纽约
  12. aaa Cv=
  13. 纽约人

  14. aaa D=
  15. D 日本 东京
  16. aaa Cv=
  17. 东京人

  18. aaa E=
  19. E 日本 大阪
  20. aaa Dv=
  21. 大阪人

  22. aaa F=
  23. F 韩国 首尔
  24. aaa Dv=
  25. 首尔人

  26. 我是后面的文本, 我是不能被修改的
  27. '@

  28. #Todo 处理代码


  29. <# 处理后的效果
  30. aaa A=
  31. A 中国 河北
  32. aaa Av=
  33. 河北人

  34. aaa B=
  35. A 中国 北京
  36. aaa Bv=
  37. 北京人

  38. aaa C=
  39. B 美国 纽约
  40. aaa Cv=
  41. 纽约人

  42. aaa D=
  43. C 日本 东京
  44. aaa Cv=
  45. 东京人

  46. aaa E=
  47. C 日本 大阪
  48. aaa Dv=
  49. 大阪人

  50. aaa F=
  51. D 韩国 首尔
  52. aaa Dv=
  53. 首尔人

  54. 我是后面的文本, 我是不能被修改的
  55. #>
复制代码
发表于 2022-12-1 13:30:32 | 显示全部楼层
本帖最后由 WHY 于 2022-12-1 13:37 编辑

图片看不清
  1. $arr = @'
  2. aaa A=
  3. A 中国 河北
  4. aaa Av=
  5. 河北人

  6. aaa B=
  7. B 中国 北京
  8. aaa Bv=
  9. 北京人

  10. aaa C=
  11. C 美国 纽约
  12. aaa Cv=
  13. 纽约人

  14. aaa D=
  15. D 日本 东京
  16. aaa Cv=
  17. 东京人

  18. aaa E=
  19. E 日本 大阪
  20. aaa Dv=
  21. 大阪人

  22. aaa F=
  23. F 韩国 首尔
  24. aaa Dv=
  25. 首尔人

  26. 我是后面的文本, 我是不能被修改的
  27. '@ -split '\r?\n';

  28. $char = [char[]](65..90);
  29. $hash = @{};
  30. $n = 0;

  31. for( $i = 0; $i -lt $arr.Count; $i++ ){
  32.     $m = [regex]::Match( $arr[$i], '^ [A-Z] (\S+)(.*)$' );
  33.     if( $m.Success ){
  34.         $key = $m.Groups[1].Value;
  35.         if( !$hash.ContainsKey($key) ){
  36.             $hash[$key] = $char[$n++];
  37.         }
  38.         $arr[$i] = ' ' + $hash[$key] + ' ' + $key + $m.Groups[2].Value;
  39.     }
  40. }
  41. $arr
复制代码

评分

参与人数 1技术 +1 收起 理由
meixi + 1 乐于助人

查看全部评分

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-17 02:28 , Processed in 0.019144 second(s), 9 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表