- 帖子
- 2874
- 积分
- 7021
- 技术
- 336
- 捐助
- 0
- 注册时间
- 2011-6-2
|
[转载代码] 使用PowerShell替换字符串中某个字符为特定数值
本文源于下面链接的讨论:
http://bbs.chinaunix.net/thread-969429-1-1.html
该讨论中希望能够实现:
替换的规则:
A----->01
B----->02
... ...
Z----->26
例如:字符串"AC159"替换成"0103159"
大家在讨论中已经看到很多人给了各种各样的方法来求解, 最直观的办法应该是写26条替换规则. 那么我给出PowerShell的解法, 其实很简单:
PS C:\> $a = "AC134","DE432","SX889"
PS C:\> $a
AC134
DE432
SX889
PS C:\> $a | %{ $_.GetEnumerator() | %{$b = ""} { if( $_ -cmatch '^[A-Z]$' ) { $b += "{0,2:00}" -f ([int]$_ - [char]'A')} else { $b += $_ } } {$b} }
0002134
0304432
1823889
|
这里我使用了几个技巧:
1. 字符串默认被当作一个整体进行迭代, 这是一个需要特别注意的特性, 但是我们可以通过在字符串对象上调用GetEnumerator方法显示返回一个迭代器, 这样我们就能对字符串中的字符进行迭代了;
2. 我使用了Foreach-Object的完整形式BEGIN, PROCESS, END;
3. 我嵌套使用Foreach-Object, 最外层是对$a中的每一个字符串, 内层的完成对一个字符串的字符进行迭代;
4. 使用了类型转换, 运算符的选择;
5. -f是字符串格式的关键字, 如何使用可以参考MSDN关于System.String类上Format静态方法的说明, 该静态方法对localization支持非常好.
http://blog.chinaunix.net/uid-9781829-id-1997708.html |
|