本帖最后由 小白龙 于 2022-8-29 19:15 编辑
┋国家, 中国, 美国, 日本
┋城市, 北京, 上海, 广州
我的名字是 ┃名字┃, 我的国家是 ┃国家┃, 我的年龄是┃年龄┃, 我家住在┃城市┃!
┋称呼, 先生, 大姐, 女士
你好┃称呼┃别来无恙.
┋称呼, 先生, 大姐
你好┃称呼┃, 我的打印机品牌是┃品牌┃.
__________________________________________________________________________________________________
上面的内容中, 有一些文本标签, 需要分离出去, 手动操作完整步骤如下:
描述有点啰嗦,但是逻辑很清楚, 请路过的大佬帮助, 非常感谢:
下面自己写的代码, 已经分离出$B标签和$C内容, 但是标签出现的次数, 还有内容中的标签修改, 等一些细节没有实现
感觉难点在于: 内容要和其上方的标签结合起来修改, 还有就是标签出现次数的判断
第1行┋开头, 表示它是标签行, 标签文本是┋和第一个逗号间的文本, 即 国家 该行要分离出去,
格式变成 ┃Y_国家┃ 中国[]美国[]日本
第2行┋开头, 表示它是标签行, 标签文本是┋和第一个逗号间的文本, 即 城市 该行要分离出去,
格式变成 ┃Y_城市┃ 北京[]上海[]广州
第3行不是┋开头, 表示它是内容行, 注意: ┃XXX┃内的文本需要处理一下
┃名字┃里的文本 名字 因为不是内容行前面的标签文本, 所以改成┃N_名字┃
┃国家┃里的文本 国家 因为是内容行前面的, 第1行的标签文本, 所以改成┃Y_国家┃
┃年龄┃里的文本 年龄 因为不是内容行前面的标签文本, 所以改成┃N_年龄┃
┃城市┃里的文本 城市 因为是内容行前面的, 第2行的标签文本, 所以改成┃Y_城市┃
第4行是空行, 要保留, 不处理
第5行┋开头, 表示它是标签行, 标签文本是┋和第一个逗号间的文本, 即 称呼 该行要分离出去,
格式变成 ┃Y_称呼┃ 先生[]大姐[]女士
第6行不是┋开头, 表示它是内容行, 注意: ┃XXX┃内的文本需要处理一下
┃称呼┃里的文本 称呼 因为是内容行前面的, 第5行的标签文本, 所以改成┃Y_称呼┃
第7行是空行, 也要保留, 不处理
第8行┋开头, 表示它是标签行, 标签文本是┋和第一个逗号间的文本, 即 称呼 该行要分离出去,
格式变成 ┃Y_称呼2┃ 先生[]大姐
因为┃Y_称呼┃ 在前面已经出现过, 现在是第2次出现, 同理, 如果后面第3次出现, 要改为┃Y_称呼3┃ 以此类推
第9行不是┋开头, 表示它是内容行, 注意: ┃XXX┃内的文本需要处理一下
┃称呼┃里的文本 称呼 因为是内容行前面的, 第8行的标签文本, 所以改成┃Y_称呼2┃ 加序号2同上理
┃品牌┃里的文本 品牌 因为不是内容行前面的标签文本, 所以改成┃N_品牌┃
__________________________________________________________________________________________________
所有标签按顺序分离出来后, 存到变量$B, 值如下:
注意: 第2个┃后面只能有一个空格, 原来的 , 替换为[] 且[]两侧无空格
┃Y_国家┃ 中国[]美国[]日本
┃Y_城市┃ 北京[]上海[]广州
┃Y_称呼┃ 先生[]大姐[]女士
┃Y_称呼2┃ 先生[]大姐
__________________________________________________________________________________________________
所有余下的内容, 存到变量$C, 值如下:
注意: 内部的空行要保留
我的名字是 ┃N_名字┃, 我的国家是 ┃Y_国家┃, 我的年龄是┃N_年龄┃, 我家住在┃Y_城市┃!
你好┃Y_称呼┃别来无恙.
你好┃Y_称呼2┃, 我的打印机品牌是┃N_品牌┃.
- [Collections.ArrayList]$B = @() #存标签
- [Collections.ArrayList]$C = @() #存内容
-
- $A = @'
- ┋国家, 中国, 美国, 日本
- ┋城市, 北京, 上海, 广州
- 我的名字是 ┃名字┃, 我的国家是 ┃国家┃, 我的年龄是┃年龄┃, 我家住在┃城市┃!
-
- ┋称呼, 先生, 大姐, 女士
- 你好┃称呼┃别来无恙.
-
- ┋称呼, 先生, 大姐
- 你好┃称呼┃, 我的打印机品牌是┃品牌┃.
- '@
-
- #将变量$a的内容进行处理:
- #┋开头的标签行:分离、处理后保存到变量$B
- #余下的内容:处理后保存到变量$C
-
- $A -split '\r\n' |
- %{
- if ($_.StartsWith("┋"))
- {
- [void]$B.Add($_)
- }
- else
- {
- [void]$C.Add($_)
- }
- }
- $B -replace '┋(.*?),', '┃Y_${1}┃' -replace ',', '[]'
-
- $C
复制代码
|