PowerShell批量反转阿拉伯文字符串脚本优化求助
批量反转PowerShell数组中的阿拉伯文本脚本优化
阿拉伯文本在PowerShell中会自动反向显示(比如'مرحبا'会显示成'ابحرم'),现有ReverseText函数只能单独反转单个阿拉伯词,没法批量处理$data数组里的所有目标内容。下面是优化后的脚本,实现批量反转数组中所有被单引号包裹的阿拉伯文本,并将结果存入$Newdata:
# 优化后的反转函数,接受明确的文本参数 function ReverseText { param([string]$Text) return (-join $Text.ToCharArray() | Sort-Object { --$script:i }) } # 定义阿拉伯字符集,用于匹配 $arabicChars = 'ابتثجحخدذرزسشصضطظعغفقكلمنهوي' # 构建正则表达式,匹配单引号包裹的阿拉伯文本 $arabicRegex = "'([$arabicChars]+)'" # 原始考题数据 $data = @( "1. The verb for the male singular in Arabic is?" " a) 'تفعل'" " b) 'تفعلان'" " c) 'يفعلون'" " d) 'يفعل'" "2. 'تلميذ' is the mufrad form of the word?" " a) 'تلاميذ'" " b) 'تلميذات'" " c) 'تلميذان'" " d) 'تلميذين'" ) # 批量处理每一行,反转所有匹配到的阿拉伯文本 $Newdata = $data | ForEach-Object { [regex]::Replace($_, $arabicRegex, { # 对每个匹配到的阿拉伯词(捕获组1)执行反转,再用单引号包裹返回 "'$(ReverseText $args[0].Groups[1].Value)'" }) } # 输出结果并暂停查看 $Newdata pause
关键优化点说明:
- 函数改进:把原函数的
$Args改为明确的参数$Text,调用更清晰,避免参数传递歧义。 - 精准匹配:用正则表达式
'([$arabicChars]+)'直接定位所有被单引号包裹的阿拉伯文本,比拆分字符串的方式更高效准确。 - 批量替换:借助
[regex]::Replace的脚本块替换功能,遍历每一行的所有匹配项,自动调用反转函数处理后替换原内容,实现批量处理。
运行脚本后,$Newdata中的所有阿拉伯文本都会被正确反转,显示为正常可读的顺序。
内容的提问来源于stack exchange,提问作者Oprex Droid
相关产品推荐
相关产品推荐

