PowerShell处理OpenWeatherMap数据:指定字符后插入换行解决输出格式问题
问题原因说明
- 拆分丢失匹配字符:PowerShell 的
-split运算符默认基于正则表达式执行拆分,拆分匹配的字符会作为边界被剔除,不会保留在返回的结果数组中,因此按Oct拆分后所有Oct字符串都会消失。 - 特殊字符拆分报错:
)属于正则表达式的保留字符,代表分组结束标记,直接传入未转义的)会导致正则语法解析失败,抛出字符数量不匹配的错误。
实现方案
你可以直接用正则替换的方式插入换行,逻辑更直观,也能保留原有字符:
- 若要在
Oct前插入换行,直接将Oct替换为换行符+Oct即可:
$forecastInfo -join "" -replace 'Oct', "`nOct" | Out-File C:\Wetterbot\Vorhersage\$Datum.txt -Encoding UTF8
- 若要在
)后插入换行,需要先转义正则特殊字符),替换为)+换行符即可:
$forecastInfo -join "" -replace '\)', ")`n" | Out-File C:\Wetterbot\Vorhersage\$Datum.txt -Encoding UTF8
如果你偏好使用拆分逻辑实现,可以用正则零宽正向先行断言,匹配目标字符的前置位置而非目标字符本身,拆分后不会丢失原有内容:
# 按Oct前置位置拆分,拆分后每个子串开头保留Oct $forecastInfo -join "" -split '(?=Oct)' -join "`n" | Out-File C:\Wetterbot\Vorhersage\$Datum.txt -Encoding UTF8
注:额外添加
-Encoding UTF8参数是为了避免Out-File默认使用的UTF-16编码导致其他程序读取文件乱码,可根据你的实际需求调整。
内容的提问来源于stack exchange,提问作者Searching....
相关产品推荐
相关产品推荐

