标题: [问题求助] PowerShell将重复国家名字前的字母重新排序 [打印本页]
作者: meixi 时间: 2022-12-1 07:50 标题: PowerShell将重复国家名字前的字母重新排序
本帖最后由 meixi 于 2022-12-1 09:56 编辑
大家好!
图片中左侧是要处理的文本, 右侧是处理后的效果! 不同的颜色仅起到区分作用
要处理的文本中, 同一个国家前的字母不相同, 处理后要改成相同的,例如
中国河北 的前面是A
中国北京 的前面是B
处理后全改为A
按相同的逻辑,把后面国家名前的字母, 也按A-Z的顺序重新修改
----------------------------------------------------------------------------------------------------
国家名怎么定位?
1.国家名所在的行之前和之后,有如下规律,其中X是一个大写字母,其它都是固定的
aaa X=
A 中国 河北
aaa Xv=
2.国家名的字数不固定, 但其相对位置是固定的
其所在的行前肯定有一个空格
空格后就是要修改的大写字母
大写字母后有一个空格
空格后是国家名,国家名的文字是连续的
国家名后有一个空格
空格后的文本是任意字符- $s = @'
- aaa A=
- A 中国 河北
- aaa Av=
- 河北人
-
- aaa B=
- B 中国 北京
- aaa Bv=
- 北京人
-
- aaa C=
- C 美国 纽约
- aaa Cv=
- 纽约人
-
- aaa D=
- D 日本 东京
- aaa Cv=
- 东京人
-
- aaa E=
- E 日本 大阪
- aaa Dv=
- 大阪人
-
- aaa F=
- F 韩国 首尔
- aaa Dv=
- 首尔人
-
- 我是后面的文本, 我是不能被修改的
- '@
-
- #Todo 处理代码
-
-
- <# 处理后的效果
- aaa A=
- A 中国 河北
- aaa Av=
- 河北人
-
- aaa B=
- A 中国 北京
- aaa Bv=
- 北京人
-
- aaa C=
- B 美国 纽约
- aaa Cv=
- 纽约人
-
- aaa D=
- C 日本 东京
- aaa Cv=
- 东京人
-
- aaa E=
- C 日本 大阪
- aaa Dv=
- 大阪人
-
- aaa F=
- D 韩国 首尔
- aaa Dv=
- 首尔人
-
- 我是后面的文本, 我是不能被修改的
- #>
复制代码
作者: WHY 时间: 2022-12-1 13:30
本帖最后由 WHY 于 2022-12-1 13:37 编辑
图片看不清- $arr = @'
- aaa A=
- A 中国 河北
- aaa Av=
- 河北人
-
- aaa B=
- B 中国 北京
- aaa Bv=
- 北京人
-
- aaa C=
- C 美国 纽约
- aaa Cv=
- 纽约人
-
- aaa D=
- D 日本 东京
- aaa Cv=
- 东京人
-
- aaa E=
- E 日本 大阪
- aaa Dv=
- 大阪人
-
- aaa F=
- F 韩国 首尔
- aaa Dv=
- 首尔人
-
- 我是后面的文本, 我是不能被修改的
- '@ -split '\r?\n';
-
- $char = [char[]](65..90);
- $hash = @{};
- $n = 0;
-
- for( $i = 0; $i -lt $arr.Count; $i++ ){
- $m = [regex]::Match( $arr[$i], '^ [A-Z] (\S+)(.*)$' );
- if( $m.Success ){
- $key = $m.Groups[1].Value;
- if( !$hash.ContainsKey($key) ){
- $hash[$key] = $char[$n++];
- }
- $arr[$i] = ' ' + $hash[$key] + ' ' + $key + $m.Groups[2].Value;
- }
- }
- $arr
复制代码
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |