此贴由 另一贴引出 http://www.bathome.net/thread-62168-1-1.html
下面的代码, 输出的结果是: hash表对象的属性,即蓝色字, 我想输出hash对象的定义的字符串,即红色字,
我找到了【hash表对象定义还原回字符串】的下面关键代码, 有两种,效果相同, 但是还差首和尾的定义, 怎么接上? 【三行代码的结果也有瑕疵,值没有被双引号引起来】
$hash.GetEnumerator() | %{
$_.key + "=" + $_.Value
}
----------------------------------上面是用枚举器的方法,下面是用遍历键值的方法
foreach ($key in $hash.keys) {
$key + "=" + $hash[$key]
}
感觉从正则匹配的地方生成可能更简单,
或可能还有更好的思路和方法, 请求路过高手支招, 提前感谢!
-----------------------------------------------------------------------------------------------------------------------------
Name Value
---- -----
日本 "在东京"
美国 "在纽约"
南非 "在刚果"
------------------------------------------------------------------
$hash = [ordered]@{
日本 = "在东京"
美国 = "在纽约"
南非 = "在刚果"
}- $s = @"
- 岁月难得沉默
- 秋风厌倦漂泊
- 夕阳赖着不走
- 挂在墙头舍不得我
- 昔日伊人耳边话
- 已和潮声向东流
- 再回首
- #开始
- 黄种人"在东京", //日本
- 白人"在纽约", //美国
- "在刚果",//南非
- 黑人//印度
- #结束
- 往事也随枫叶一片片落
- 爱已走到尽头
- 恨也放弃承诺
- 命运自认幽默
- 想法太多由不得我
- 壮志凌云几分酬
- 知己难逢几人留
- "@
- $txt = $s -split '\n' -join "|"
- $pattern1 = "#开始(.*)#结束"
- $pattern2 = '("\w+"),\s?//(\w+)'
- $hash = [ordered]@{ }
- if ($txt -match $pattern1)
- {
- $target = $matches[1].split('|')
- }
- foreach ($line in $target)
- {
- if ($line -match $pattern2)
- {
- $hash[$matches[2]] = $matches[1]
- }
- }
- $hash
复制代码 |