本帖最后由 flashercs 于 2022-8-30 10:55 编辑
- [Collections.ArrayList]$B = @() #存标签
- [Collections.ArrayList]$C = @() #存内容
-
- $dicLabel = @{} #标签个数统计
- $dicLabelLocal = @{} #标签个数统计Local
- $reLabel = [regex]'┋([^,]*),(\s*)' #标签正则
- $reContent = [regex]'┃([^┃]*)┃' #内容正则
- # 替换label
- $sbLabel = {
- param([System.Text.RegularExpressions.Match]$m)
- $k = $m.Groups[1].Value
- if ($dicLabel.ContainsKey($k)) {
- $ctr = (++$dicLabel[$k])
- $dicLabelLocal[$k] = "$k$ctr"
- "┃Y_$k$ctr┃$($m.Groups[2].Value)$k$ctr[]"
- } else {
- $dicLabel[$k] = 1
- $dicLabelLocal[$k] = "$k"
- "┃Y_$k┃ $($m.Groups[2].Value)$k[]"
- }
- }
- # 替换内容
- $sbContent = {
- param([System.Text.RegularExpressions.Match]$m)
- $k = $m.Groups[1].Value
- if ($dicLabelLocal.Contains($k)) {
- "┃Y_$($dicLabelLocal[$k])┃"
- } else {
- "┃N_$k┃"
- }
- }
- $A = @'
- ┋国家, 中国, 美国, 日本
- ┋城市, 北京, 上海, 广州
- 我的名字是 ┃名字┃, 我的国家是 ┃国家┃, 我的年龄是┃年龄┃, 我家住在┃城市┃!
-
- ┋称呼, 先生, 大姐, 女士
- 你好┃称呼┃别来无恙.
-
- ┋称呼, 先生, 大姐
- 你好┃称呼┃, 我的打印机品牌是┃品牌┃.
- '@
-
- #将变量$a的内容进行处理:
- #┋开头的标签行:分离、处理后保存到变量$B
- #余下的内容:处理后保存到变量$C
- $stack = 0 #content
- $A -split '\r\n' | ForEach-Object {
- if ($stack -eq 0) {
- if ($_.StartsWith("┋")) {
- $stack = 1
- $dicLabelLocal.Clear()
- [void]$B.Add(($reLabel.Replace($_, $sbLabel) -replace ',\s*', '[]'))
- } else {
- [void]$C.Add($reContent.Replace($_, $sbContent))
- }
- } else {
- if ($_.StartsWith("┋")) {
- [void]$B.Add(($reLabel.Replace($_, $sbLabel) -replace ',\s*', '[]'))
- } else {
- $stack = 0
- [void]$C.Add($reContent.Replace($_, $sbContent))
- }
- }
- }
-
- $B
- $C
复制代码
|