Board logo

标题: [转载代码] 使用PowerShell替换字符串中某个字符为特定数值 [打印本页]

作者: DAIC    时间: 2013-10-16 09:20     标题: 使用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




欢迎光临 批处理之家 (http://www.bathome.net/) Powered by Discuz! 7.2