PowerShell字符串分词函数优化:连续大写字母拆分问题求助
优化PowerShell字符串单词提取的正则方案
针对连续大写字母后接小写字母无法正确拆分的问题,可通过调整正则表达式精准识别单词边界来解决。
优化后的函数实现
function Get-WordList { [CmdletBinding()] param( [Parameter(Mandatory, ValueFromPipeline)] [string]$InputString ) # 匹配两种单词块: # 1. 连续大写字母(直到遇到"大写+小写"组合或字符串结尾) # 2. 单个大写字母开头,后续跟任意小写字母 $wordPattern = '[A-Z]+(?=[A-Z][a-z]|$)|[A-Z][a-z]*' $words = [regex]::Matches($InputString, $wordPattern) | ForEach-Object { $_.Value } # 返回唯一单词列表 $words | Select-Object -Unique }
正则逻辑说明
[A-Z]+(?=[A-Z][a-z]|$):匹配连续大写字母,仅当这些大写字母后紧跟"大写+小写"组合或字符串结尾时生效。比如在"AADJTagged"中,该规则会匹配出"AADJ",因为J后是T(大写)+a(小写)的组合。[A-Z][a-z]*:匹配单个大写字母开头、后续跟任意数量小写字母的单词块,比如"Tagged"就会被该规则匹配到。
测试示例
# 测试连续大写后接小写场景 Get-WordList -InputString "AADJTagged" # 输出: # AADJ # Tagged # 测试常规驼峰命名场景 Get-WordList -InputString "PowerShellFunctionExample" # 输出: # Power # Shell # Function # Example # 测试混合缩写场景 Get-WordList -InputString "HTTPRequestJSON" # 输出: # HTTP # Request # JSON
内容的提问来源于stack exchange,提问作者powershellcrack
相关产品推荐
相关产品推荐

